只需要将该点投影到平面上,投影得到的点就是最短的点,也就可以得到最短距离
/// <summary>
/// 计算点到平面的最短距离
/// </summary>
/// <param name="planeNormal">平面法向量</param>
/// <param name="planePos">平面的坐标</param>
/// <param name="point">平面外一点</param>
private Vector3 GetNearPoint(Vector3 planeNormal, Vector3 planePos, Vector3 point)
{
//公式 (newPoint-m)·n=0 计算得出newPoint坐标
float x = planeNormal.x + 1; //随便取个值,不跟normal的x相等就行
float z = (planePos.z * planeNormal.z - x * planeNormal.x + planePos.x * planeNormal.x) / planeNormal.z; //点乘为0,算出该点坐标
Vector3 newM = new Vector3(x, 0, z);
Vector3 project = Vector3.Project(point - planePos, newM - planePos);
Vector3 newPoint = project + planePos;
return newPoint;
}
打印线段,如图1
[图1]