首页 文章

当已知三角形的两个点时,我们如何在圆上找到第三个点?

提问于
浏览
4

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

  • 2-d A(x1,y1)的坐标值,即(357,257)

  • 2-d B(x2,y2)的坐标值,即(93,169)

  • 从A到B的距离是278(圆的半径)

  • 从A到C的距离是278(圆的半径)

  • 从B到C的距离是244

  • 角∠BAC≡∠CAB≡∠A= 52°

现在的问题是:

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

2 回答

  • 0

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

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

    因此,另一种看待它的方式可能是圆圈居中(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);
    

相关问题