找到圆与无限圆柱的交点。 (全部为3D) •圆由中心,平面和半径定义。 •圆柱体由轴和半径定义。
我怎样才能得到这两者的交集?
答案 0 :(得分:0)
让圆柱的某个基点为A0,单位轴方向向量为AD,半径为AR。圆心为B0,圆平面单位法线为BN,半径为BR。
如果从B0到cyl的距离,圆与圆柱相交。轴小于圆柱半径之和加上圆半径在垂直轴上的投影
Dist <= AR + BR * Abs(Cos(AD, BN)).
Cos(AD, BN) = DotProduct(AD, BN)
Distance(B0, cyl.axis) = Abs(VectorProduct(AD, B0-A0))
答案 1 :(得分:0)
WLOG圆柱体有等式X² + Y² = 1
(如果没有,你可以通过平移,旋转和缩放来实现)。
然后圆的参数方程是
P = C + U cos t + V sin t
其中C
是中心点,U
,V
圆平面中有两个正交向量,长度为R
。
您可以使用替换cos t = (1 - u²) / (1 + u²), sin t = 2u / (1 + u²)
合理化。
结合这些方程,
(Cx (1 + u²) + Ux (1 - u²) + Vx 2u)² + (Cy (1 + u²) + Uy (1 - u²) + Vy 2u)² = (1 + u²)²
这是一个四分之一。系数没有特别的简化。
您可以通过数字或封闭式公式求解。最多可以有四种解决方案。
我猜这绝对等同于找到通过使圆周膨胀形成的环面与通过使圆柱体向其轴线放气而获得的直线之间的交叉点。这在射线追踪文献中得到了很好的解决。
您也可以将其视为2D中的圆/椭圆交点问题。