如何检测线段与圆柱相交?

时间:2013-04-16 19:02:32

标签: algorithm geometry intersection

假设我们有一个3d空格,由其起点和终点(A {Ax, Ay, Az}B {Bx, By, Bz}定义的线段,并由其中心位置C {Cx, Cy, Cz},半径R和高度H。如何得到一个交叉点的事实,如果发生了交叉,那么?

2 个答案:

答案 0 :(得分:2)

Try this。谷歌的胜利 - 答案甚至在这里。这甚至包含源代码和更多信息的链接供您使用。只需要一点点搜索,你就可以自己做到这一点。

这是基于@ DuckQueen的答案 - 它只是添加投影交叉点 - 如果有的话 - 看它是否落在圆柱体的高度内。

答案 1 :(得分:1)

设x =(y-a2)/ b2 =(z-a3)/ b3为线的等式。

设(x-c1)^ 2 +(y-c2)^ 2 = d ^ 2是圆柱的方程。

将线方程中的x代入圆柱方程。

您可以使用二次方程求解y。您可以有0个解决方案(圆柱和直线不相交),1个解决方案或2个解决方案。

将y的值替换为线方程以获得x和z坐标。

要从两点获得线方程,请参阅:http://www.nabla.hr/Z_CGLinesAndPlanesIn3DSpace-A.htm

我提供的解决方案适用于无限高度的气缸。限制为高度为H的圆柱体:如果点在高度内(即z在限制范围内),输出点,则找到交点。