罕见案例:基于段和点的平面交叉c#

时间:2012-02-04 22:40:27

标签: intersection point segment plane

我一直在寻找一天,但无法找到我需要的帮助。

关于-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 个答案:

答案 0 :(得分:1)

您可以将点+法线转换为法线+距离

设N为法线(标准化为单位长度)。距离d = -n.p(点积与你得到的点)。见http://mathworld.wolfram.com/Plane.html

该细分市场与该细分市场并无太大差异。您可以对线和平面交点的方程做基本的事情,然后尝试如果平面相交的点或点集也属于您的线段。可能有一种更有效的方法,但最简单的方法是添加一个检查,以查看通过泛型线获得的交叉结果是否包含该段。