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

4
假设在一个圆上有一个三角形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)?
2个回答

1
你可以相对于A点将B点旋转52°(别忘了使用弧度)。如果需要向另一个方向旋转,请更改角度符号。
x3=x1+(x2-x1)*Cos(52)-(y2-y1)*Sin(52)
y3=y1+(x2-x1)*Sin(52)+(y2-y1)*Cos(52)

0

所以另一种看待它的方式可能是,圆心位于(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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接