如何检测线段与圆柱体的相交



假设我们有一个3d空间,由其起点和终点(A {Ax, Ay, Az}, B {Bx, By, Bz})定义的线段和由其中心位置C {Cx, Cy, Cz},半径R和高度H定义的圆柱体。如何得到交集的事实如果交集发生在哪里?

试试这个。谷歌赢了——答案就在这里。它甚至有源代码和更多信息的链接供您使用。只要稍微搜索一下,你自己就能得到这个了。

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

设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在限制范围内),输出点。

最新更新