1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| float3 p; //设存在同时位于直线和平面上的点p float3 t; //设t为p点距离直线原点的长度
//带入直线定义公式可得 p = Line.Origin + Line.Normal * t; //进一步带入到平面公式可得 Dot( (Line.Origin + Line.Normal * t) - Plane.Origin, Plane.Normal ) = 0;
//根据Dot结合律拆分公式 Dot(Line.Origin,Plane.Normal) + Dot(Line.Normal * t,Plane.Normal) - Dot(Plane.Origin,Plane.Normal) = 0; //调换常数部分到右侧,并化简Dot函数 Dot(Line.Normal,Plane.Normal) * t = Dot(Plane.Origin - Line.Origin,Plane.Normal);
//化简出t的计算公式(可见Line.Normal和Plane.Normal不能垂直,否则会除以0) t = Dot(Plane.Origin - Line.Origin,Plane.Normal) / Dot(Line.Normal,Plane.Normal) //计算出结果 p = Line.Origin + Line.Normal * t
|