【问题标题】:Intersection points between 2 discs in 3d3d 中 2 个圆盘之间的交点
【发布时间】:2014-09-16 13:34:40
【问题描述】:

我正在尝试找到一种算法或一种方法来找到球体上两个圆之间的交点(在 3d 中)。例如,如果我有两个圆心在两个点A(latitude1,longitude1) and B(latidude2,longitude2) 假设它们相交,我怎样才能找到这两个圆之间的交点?有没有算法可以做到这一点?

谢谢

【问题讨论】:

  • 转换为 3D 笛卡尔坐标。求圆所在的两个平面的参数。找出包含平面交点的直线的参数。找到直线与球体的交点。转换回纬度/经度。注意退化的情况。
  • @David Eisenstat 您能否给我一个数字示例或来源或参考资料,我可以从中阅读以清楚地了解如何做到这一点?谢谢

标签: algorithm geometry computational-geometry


【解决方案1】:
  1. Convert from latitude/longitude to 3D Cartesian coordinates.

  2. 对于每个圆,找到方程nx x + ny y + nz z = d 与球体相交的平面是圆。假设 球体以原点为中心,法向量 (nx, ny, nz) 是圆心 (cx, cy, cz)(投影或 不是)归一化后。

                     (cx, cy, cz)
    (nx, ny, nz) = -----------------
                   ||(cx, cy, cz)||
                                   2
    

    距离d 是使用毕达哥拉斯计算的。设r 为半径 圆的半径和R 是球体的半径。

     2    2    2
    R  = d  + r
          _______     _______________
         | 2    2    |
    d = \|R  - r  = \|(R + r) (R - r)
    

    第二个表达式更适合数值稳定性。

    如果我们只知道球体表面的长度r' 将圆心投影到圆上,然后计算

    d = R cos(r'/R)
    r = R sin(r'/R).
    

    在这种情况下,我们实际上不需要r

  3. Find the intersection of the two planes, a line.

  4. Find the intersection of the line and the sphere, between zero and two points.

  5. Convert the points to latitude/longitude.

【讨论】:

  • 第四步假设给我 0、1 或 2 以表示正确,但我不明白。遵循这些步骤后,我得到类似 3.222 的东西,这显然是错误的。我试图仔细检查,但我似乎已经按照步骤进行了;我不确定我是否做了,因为我仔细检查了很多次,我的计算似乎很好。
  • @user3841581 然后搜索另一个球体射线相交答案。有很多。
  • 谢谢大卫·艾森斯塔特;我认为在我的问题中,我可能不得不考虑二维磁盘的交集。再次感谢您的宝贵时间
  • 检查后,我的问题不能简化为2D。你能帮我找到那些交叉点的​​方法或函数吗?假设我有 A(0,0) 和 B(0,30)。你能帮我一个可以帮助我找到它的方法或功能吗?谢谢
猜你喜欢
  • 2012-07-20
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2016-07-21
相关资源
最近更新 更多