点投影的示例

2020/03 13 17:03
using UnityEngine;

public class CalcPointProj : MonoBehaviour
{
    public Transform Line0;
    public Transform Line1;
    public Transform CalcPoint;

    // 计算pc点在p1和p0点连成线的投影
    public static Vector3 PointProj(Vector3 p0, Vector3 p1, Vector3 pc)
    {
        var n0 = p1 - p0;
        var v0 = pc - p0;
        var d = Vector3.Distance(p1, p0);
        var k = Vector3.Dot(n0, v0) / ( d * d );
        return p0 + n0 * k;
    }

    void OnDrawGizmos()
    {
        if (Line0 != null && Line1 != null && CalcPoint != null)
        {
            Gizmos.DrawLine( Line0.position, Line1.position );
            Gizmos.DrawSphere( PointProj(Line0.position, Line1.position, CalcPoint.position) , 1);
        }
    }
}