已知条件:平面P的法向量,平面上的一点P0,直线L的方向向量,直线上的一点L0
公式推导:
主要是两点:
1.目标点T在直线上:T=L0+D*(D未知)
2.目标点T在平面上,则TP0垂直:(T-P0)*=0
将1式代入2式,求得D, **D=(P0-L0)*
最终再带回1式就能求出交点T
代码:
/// <summary>
/// 求直线L和平面的交点
/// </summary>
/// <param name="lineUnitVector">直线的方向向量</param>
/// <param name="linePos">直线上的一点</param>
/// <param name="panelUnitVector">平面的法向量</param>
/// <param name="panelPos">平面上的一点</param>
/// <returns></returns>
private Vector3 GetPosToPanelProjection(Vector3 lineUnitVector,Vector3 linePos,Vector3 panelUnitVector,Vector3 panelPos)
{
float d = Vector3.Dot(panelPos - linePos, panelUnitVector) / Vector3.Dot(lineUnitVector, panelUnitVector);
return linePos + lineUnitVector * d;
}