任意点到二维直线或者三维平面上的投影点

这里统一考虑二维直线和三维平面的情况。
假设法线(二维直线和三维平面的法线)为n,其上的任意一点为p0。那么,
可以得到方程为:(p - p0) * n = 0。展开得到p * n = p0 * n。令p0 * n = d,由此可以得到
方程可以简单的表示为p * n = d,即(x, y, z) * (nx ,ny, nz) = d,二维情况直线的为(x, y) * (nx, ny) = d。
至此,我们可以方便的用(n,d)代表任意的二维直线或者三维平面了。
下面,开始应用这个表示。
比如,求点到直线或者平面的距离,然后求投影点,再求对称点。
最关键的是如何方便求出距离。假设我们要求q到直线的距离。我们现在的直线方程为
p * n = d。那么经过q与当前直线的平行直线的法线也为n。由于q在经过q的平行直线上面,有q * n = d’。
有符号距离为 d - d’ = d - q * n。通过这个式子,也可以知道d其实就是原点到直线或者平面的有符号距离。
那么投影点q’ = q + (d - d’) = q + (d - q * n)。
对称点则为 q’’ = q’ + (d - d’) = q + 2 * (d - q * n)。
利用这种表示方法,基本上可以直接给出答案。