计算点到线上的垂点,首先明确:
该线段必须给出确切的起始点和终点, 而不是一个向量,因为一个向量并不能代表一个线段。
所以参数列表如下:
Vector3 VerticalPoint(Vector3 point, Vector3 lStart, Vector3 lEnd);
下图中蓝色标记的是未知量,黑色为已知量


point,LStart,LEnd都已知,vector = LEnd- LStart, guideLine = point - LStart 都已知|target - LStart|长度,|guideLine| * cosθLStart的偏移量vector向量转化为单位向量|vector.normalize| == 1,所以当vector = vector.normalize ,则|vector| == 1vector.normalize 和 guideLine 均可知target = LStart + vector * 偏移量public static Vector3 VerticalPoint(Vector3 point, Vector3 lStart, Vector3 lEnd)
{
Vector3 guideLine = point - lStart;
Vector3 vector = lEnd - lStart;
//float magnitude = vector.magnitude;
vector = vector.normalized;
float num2 = Vector3.Dot(vector, guideLine);
//有需要的话可以将值限制在范围之间,比如这里限制在 线段内部
//float num2 = Mathf.Clamp(Vector3.Dot(vector, guideLine), 0f, magnitude);
return lStart + (vector * num2);
}