【问题标题】:How to calculate (x,y) for a fixed arc length away from a point on a circumference如何计算远离圆周上一点的固定弧长的(x,y)
【发布时间】:2011-05-05 21:25:37
【问题描述】:

我在这件事上花了这么多小时,我感觉我的理智在慢慢滑落。因此,任何帮助将不胜感激。 我会尽量简洁。

我在 2D 平面上有一个圆。我知道它的中心点(C)和半径(R)的笛卡尔坐标。

我的困惑源于这个问题。当在圆外的平面上提供一个点时;我可以计算最接近该点的圆周上的点(P)。

我想要做的是确定圆周上 2 个点的 (x,y) 坐标。我们称它们为 P1 和 P2。 P1和P2是圆弧的两端。弧的长度是固定的(X)。 P 是 P1 和 P2 之间的中点。因此,P 到 P1 和 P 到 P2 的弧长都是 X/2。

简而言之: 给定 C、R、P、X;我需要计算 P1 和 P2。

我正在尝试用 c++ 编写代码,但任何建议或伪代码都会很棒。

编辑: X 是弧长,不是 P1 和 P2 之间的直线

【问题讨论】:

标签: c++ c trigonometry geometry geometric-arc


【解决方案1】:

有一些事情可以提供帮助。不会写代码,但我想解决方案将基于三角形。考虑:

任何半径都是相同的长度。

因此从 P1-P1-C 绘制的三角形是等腰三角形。

任何切线都垂直于半径。

我很难在此时此地证明这一点,但如果你将线从 C 通过 P1/P2 延伸到与 C->P 处的圆相交的切线,也会形成等腰线。

从那里应该很容易弄清楚。

【讨论】:

    【解决方案2】:

    对角 θ(弧度)的弧的弧长为 θR。因此,您需要 θ = X/(2R) 的半角。然后,您需要获取向量 (P -C),将其旋转 ±θ 角,然后在 C 中加回以获得 P1 和 P2。要将矢量旋转一个角度,请将其乘以 rotation matrix

    所以,在伪代码中,它看起来像这样:

    θ = X/(2R)
    A = 2x2 rotation matrix corresponding to a rotation by θ radians
    A' = transpose of A
    P1 = C + A * (P - C)
    P2 = C - A' * (P - C)
    

    【讨论】:

      【解决方案3】:

      在圆上,角度theta 对应于theta * R 的弧长,这意味着您的弧将对theta = X / R 的角度。所以如果从你的观点开始

      P = C + R * (sin(u), cos(u))
      

      然后通过theta/2 上/下:

      P1 = C + R * (sin(u + theta/2), cos(u + theta/2))
      

      P2 = C + R * (sin(u - theta/2), cos(u - theta/2))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        相关资源
        最近更新 更多