题:已知经过点P,方向向量为D的直线,以及经过点P1,法线方向向量为D1的平面,求两者之间的交点?
思路:先求出直线上所有点的集合Line,然后求出平面上所有点的集合Plane,求两个集合的交集即可。
步骤:
(1)直线所有点的集合,L为三维向量,m为实数
(2)平面所有点的集合,C为三维向量
(3)集合Line与集合Plane交集,S为三维向量
(4)S方程组表达式
Unity代码:
/// <summary>
/// 求直线与平面的交点
/// </summary>
/// <param name="P">直线上的一点</param>
/// <param name="D">直线方向</param>
/// <param name="P1">平面上一点</param>
/// <param name="D1">平面上方向</param>
/// <returns></returns>
Vector3 GetIN(Vector3 P, Vector3 D, Vector3 P1,Vector3 D1)
{
if (D.x*D1.x+ D.y * D1.y + D.z * D1.z == 0)
{
//方向向量与平面平行,没有交点
return Vector3.zero;
}
float m = ((P1.x - P.x) * D1.x +
(P1.y - P.y) * D1.y +
(P1.z - P.z) * D1.z) /
(D1.x * D.x + D1.y * D.y + D1.z * D.z);
return new Vector3(P.x + D.x * m, P.y + D.y * m, P.z + D.z * m);
}
应用场景: