【问题标题】:Finding the intersection of the Circle and Infinite Cylinder in 3D space在 3D 空间中寻找圆和无限圆柱的交点
【发布时间】:2016-09-13 18:41:47
【问题描述】:

找到圆和无限圆柱的交点。 (全部为 3D) • 圆由中心、它所在的平面和半径定义。 • 圆柱体由轴和半径定义。

我怎样才能得到这两者的交集?

【问题讨论】:

标签: geometry computational-geometry geometry-surface


【解决方案1】:

WLOG圆柱有方程X² + Y² = 1(如果没有,你可以通过平移、旋转和缩放来实现)。

那么圆的参数方程为

P = C + U cos t + V sin t

其中C 是中心点,UV 是圆平面中的两个正交向量,长度为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 中的圆/椭圆相交问题。

【讨论】:

  • @AmolN:你不明白什么?为什么一定要解决这个问题?
  • @AmolN:这些是你能找到的最简单的。
  • @AmolN:未知数是 u,答案中解释了系数。
  • @AmolN: 哼,圆不是平面的吗?
  • bt Cylinder 是一个 3D 对象
【解决方案2】:

假设圆柱的某个基点是A0,单位轴方向向量是AD,半径是AR。圆心为B0,圆平面单位法线为BN,半径为BR。

圆与圆柱相交,如果从 B0 到圆柱的距离。轴小于圆柱半径加上圆半径在轴法线上的投影的总和

Dist <= AR + BR * Abs(Cos(AD, BN)).

Cos(AD, BN) = DotProduct(AD, BN)
Distance(B0, cyl.axis) = Abs(VectorProduct(AD, B0-A0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2016-07-21
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多