【问题标题】:Calculate point and circle segment collision计算点和圆段碰撞
【发布时间】:2011-04-12 09:08:46
【问题描述】:

如果我计算了一条线段和一个圆的交点,我怎么知道这个交点是否在圆的一段上?

我有方程来判断一条线段是否与圆相交,我也有那个圆上的交点,但我需要知道的是圆上的这个碰撞点是否在该圆的特定 arg 段的边界。我有圆弧段的端点、圆的中心和半径以及碰撞点。

【问题讨论】:

标签: math trigonometry geometry segment


【解决方案1】:

将交点围绕中心转换为polar coordinates,并比较角度。

【讨论】:

  • 我没有任何角度。我得到的唯一数据是弧的两个端点。
  • @Scienceprodigy 您可以使用圆的中心点和圆弧点找到角度。您需要为角度选择一个参考轴(通常是 x 轴),并选择逆时针或顺时针是增加还是减少角度。
  • 可以用叉积判断点是否在角度范围内
【解决方案2】:

作为 Dario 想法的替代方案(应该也可以),您可以:

  1. 计算交点与圆弧端点之间的距离(称为intdist1intdist2)。
  2. 计算圆弧端点之间的距离 (arcdist)。
  3. 如果圆弧小于圆的一半(覆盖小于 180 度),那么如果 intdist1intdist2 都小于 arcdist,则您知道该点是否在圆弧中。
  4. 否则,如果圆弧大于圆的一半(覆盖超过 180 度),那么如果 intdist1intdist2 大于 arcdist,则您知道该点是否在圆弧中。

我猜,因为您没有另外指定,所以端点之间的弧线绕得短。在这种情况下,您无需担心上述第 4 步。

如果您使用的圆弧正好覆盖圆的 180 度,则该方法会失败。在这种情况下,您可以将 180 度弧线分成 90 度弧线并检查它们我想。

此外,您当然可以使用距离的平方来比较这些距离,以节省平方根。此外,这种方法应该比计算角度更快,因为这涉及使用昂贵的反余弦。

【讨论】:

    猜你喜欢
    • 2014-02-28
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多