在 3D 中找到圆和无限圆柱的交点 space
Finding the intersection of the Circle and Infinite Cylinder in 3D space
寻找圆和无限圆柱的交点。 (全部为 3D)
• 圆由圆心、圆所在的平面和半径定义。
• 圆柱由轴和半径定义。
我怎样才能得到这两个的交集?
设某圆柱体基点为A0,单位轴方向矢量为AD,半径为AR。圆心为B0,圆平面单位法线为BN,半径为BR.
圆与圆柱相交,如果从 B0 到圆柱的距离。 axis 小于圆柱体半径加上圆半径在轴法线上的投影之和
Dist <= AR + BR * Abs(Cos(AD, BN)).
Cos(AD, BN) = DotProduct(AD, BN)
Distance(B0, cyl.axis) = Abs(VectorProduct(AD, B0-A0))
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²)²
这是一个四次方。系数没有特别简化。
您可以通过数值或闭式公式求解。最多可以有四种解决方案。
我猜这严格等同于求圆周膨胀形成的环面和圆柱体绕其轴放气得到的直线的交点。这在光线追踪文献中得到了很好的解决。
您也可以将其视为 circle/ellipse 二维交叉问题。
寻找圆和无限圆柱的交点。 (全部为 3D) • 圆由圆心、圆所在的平面和半径定义。 • 圆柱由轴和半径定义。
我怎样才能得到这两个的交集?
设某圆柱体基点为A0,单位轴方向矢量为AD,半径为AR。圆心为B0,圆平面单位法线为BN,半径为BR.
圆与圆柱相交,如果从 B0 到圆柱的距离。 axis 小于圆柱体半径加上圆半径在轴法线上的投影之和
Dist <= AR + BR * Abs(Cos(AD, BN)).
Cos(AD, BN) = DotProduct(AD, BN)
Distance(B0, cyl.axis) = Abs(VectorProduct(AD, B0-A0))
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²)²
这是一个四次方。系数没有特别简化。
您可以通过数值或闭式公式求解。最多可以有四种解决方案。
我猜这严格等同于求圆周膨胀形成的环面和圆柱体绕其轴放气得到的直线的交点。这在光线追踪文献中得到了很好的解决。
您也可以将其视为 circle/ellipse 二维交叉问题。