如何将线段修剪到平截头体上?
时间:2020-03-05 18:57:22 来源:igfitidea点击:
给定两个向量A和B,它们形成线段L = A-B。
此外,给出视锥台F,该视锥台由其左,右,底,顶,近和远平面定义。
如何将L夹在F上?
也就是说,测试一个交集,以及该交集出现在L的哪个位置?
(请记住,如果一个线段与一个角的两侧相交,则它与平截头体可以有多个交集。)
如果可能,请提供代码示例(首选C ++或者Python)。
解决方案
回答
我现在不想为此编写代码,但是如果我正确理解"视锥",则应该可以进行以下工作。
- 将直线与所有给定平面相交
- 如果我们有两个交叉路口,那么就完成了。
- 如果只有一个相交,请计算前平面并相交。
- 如果仍然只有一个相交,请计算背板并相交。
但是我可能完全被误解了。在这种情况下,请详细说明:)
回答
除了上面所说的Corporal Touchy所说的,我们还需要知道如何使线段与平面相交。在该页面的描述中,u表示行的参数定义中的参数。首先,使用上述2种方法之一计算u。如果u的值落在0.0到1.0的范围内,则平面会将线段修剪到线段上的某处。将u重新插入到直线方程式中,即可得出发生交点的点。
另一种方法是找到每个点到平面的定向距离。如果一个点的距离为正,而另一个点的距离为负,则它们位于平面的相对侧。然后,我们会知道哪个点位于视锥之外(基于飞机法线点的方向)。使用这种方法,可以通过基于有向距离的比率进行线性插值来更快地找到相交点。例如。如果一个点的距离是+12,另一个点的距离是-12,则我们知道飞机将线段切成两半,并且u参数是0.5.
希望这可以帮助。