点投影的示例
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);
}
}
}