2012-02-04 43 views
0

我一直在寻找一天,无法找到我所需要的帮助。罕见情况:段和点基于平面交会c#

关于-lines-和-planes-有很多建议和解决方案,但关于-segments-和-planes-的内容很少,特别是关于通过法线和点定义的平面没有任何关系。一个平面的一般参考是通过一个法线和一个距离,而我的平面是一个3d点和一个法线。

基本上,我需要帮助了解我需要确定由两点形成的线段的平面相交。

Vector3 point1 = new Vector3 (-4,-5,-6); 
Vector3 point2 = new Vector3 (5,3,2); 
          //normal   //point 
Plane plane1 = new plane (new Vector3(0,0,1), new Vector3(4,2,1)); 

Vector3 intersection = ??? 

确定是否有交集是相对容易由于点积点距离,但尽管我努力的交集公式躲开我,因为事情是一个“正 - 距离”平面定义以及“正常明显不同,因为我得到的结果不是'在飞机上',而是在它的前面和后面,所以我认为这个点的定义是'平面定义'。

任何帮助表示赞赏。

谢谢。

回答

1

可以将点+正常转换成正常+距离

设N是正常(归一化到单位长度)。距离d = -n.p(与您拥有的点的点积)。请看这里http://mathworld.wolfram.com/Plane.html

该段与该行没有太大的不同。你可以为线和平面交点方程做基本的事情,然后尝试如果平面相交的点或一组点也属于你的线段。可能有更高效的方法,但最简单的方法就是添加一个检查来查看用普通线获得的交集结果是否包含段。

+0

非常感谢,我已经重构了自问题以来,但距离转换的一点是知道的有用的东西:) – roamcel 2012-02-24 07:53:32