如何将线段修剪到平截头体上?

时间:2020-03-05 18:57:22  来源:igfitidea点击:

给定两个向量A和B,它们形成线段L = A-B。
此外,给出视锥台F,该视锥台由其左,右,底,顶,近和远平面定义。

如何将L夹在F上?

也就是说,测试一个交集,以及该交集出现在L的哪个位置?
(请记住,如果一个线段与一个角的两侧相交,则它与平截头体可以有多个交集。)

如果可能,请提供代码示例(首选C ++或者Python)。

解决方案

回答

我现在不想为此编写代码,但是如果我正确理解"视锥",则应该可以进行以下工作。

  • 将直线与所有给定平面相交
  • 如果我们有两个交叉路口,那么就完成了。
  • 如果只有一个相交,请计算前平面并相交。
  • 如果仍然只有一个相交,请计算背板并相交。

但是我可能完全被误解了。在这种情况下,请详细说明:)

回答

除了上面所说的Cor​​poral Touchy所说的,我们还需要知道如何使线段与平面相交。在该页面的描述中,u表示行的参数定义中的参数。首先,使用上述2种方法之一计算u。如果u的值落在0.0到1.0的范围内,则平面会将线段修剪到线段上的某处。将u重新插入到直线方程式中,即可得出发生交点的点。

另一种方法是找到每个点到平面的定向距离。如果一个点的距离为正,而另一个点的距离为负,则它们位于平面的相对侧。然后,我们会知道哪个点位于视锥之外(基于飞机法线点的方向)。使用这种方法,可以通过基于有向距离的比率进行线性插值来更快地找到相交点。例如。如果一个点的距离是+12,另一个点的距离是-12,则我们知道飞机将线段切成两半,并且u参数是0.5.

希望这可以帮助。