【问题标题】:When two points of a triangle are known, how can we find the third point on a circle?当已知三角形的两点时,如何找到圆上的第三点?
【发布时间】:2013-01-31 22:07:45
【问题描述】:

假设一个圆上有一个三角形ABC,其中A是圆心,B和C是同一个圆的边界上的两点,关于这个三角形我们知道以下几点:

  1. A (x1,y1) 的二维坐标值,即 (357,257)
  2. B 的二维坐标值 (x2,y2) 即 (93,169)
  3. 从 A 到 B 的距离是 278(圆的半径)
  4. 从 A 到 C 的距离是 278(圆的半径)
  5. B 到 C 的距离是 244
  6. 角度 ∠BAC ≡ ∠CAB ≡ ∠A = 52°

现在的问题是:

如何求C点的二维坐标值(x3,y3)???

【问题讨论】:

    标签: geometry coordinate


    【解决方案1】:

    您可以将 B 点相对于 A 点旋转 52°(不要忘记使用弧度)。如果您需要向另一个方向旋转,请更改角度符号。

    x3=x1+(x2-x1)*Cos(52)-(y2-y1)*Sin(52)
    y3=y1+(x2-x1)*Sin(52)+(y2-y1)*Cos(52)
    

    【讨论】:

      【解决方案2】:

      所以另一种看待它的方式可能是圆以 (357, 357) 为中心,你在圆的外侧有一个点,你想绕着圆前进这么多度?似乎是 (5) (6) (或者,我猜,约束是不一致的)。

      自然会有两个解决方案,因为您的约束允许两个答案,如果两个答案一起绘制,它们看起来就像圆的相邻切片。

      最简单的解决方案可能是使用 arctan 获得从 A 到 B 线段水平的角度,然后加上或减去 52 并使用 sin/cos 在外部获得一个新点圈子。

      例如(在 C 中,假设我正确地记住了我的象限)

      float angleOfAB = atan2f(B.y - A.y, B.x - A.x);
      float angleOfAC = angleOfAB + 52.0f * M_PI / 180.0f; // in radians
      
      // could use squartf here if the radius is unknown
      
      Position C;
      C.x = A.x + 278.0f * cos(angleOfAC);
      C.y = A.y + 278.0f * sin(angleOfAC);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-21
        • 2018-04-08
        • 1970-01-01
        • 2019-09-08
        相关资源
        最近更新 更多