假设在一个圆上有一个三角形 ABC,其中 A 是圆心,B 和 C 是同一个圆的边界上的两点,关于这个三角形,我们知道以下几点:
- A (x1,y1) 的二维坐标值,即 (357,257)
- B (x2,y2) 的二维坐标值,即 (93,169)
- 从 A 到 B 的距离是 278(圆的半径)
- 从 A 到 C 的距离是 278(圆的半径)
- 从 B 到 C 的距离是 244
- 角度 ∠BAC ≡ ∠CAB ≡ ∠A = 52°
现在的问题是:
如何求点 C (x3,y3) 的二维坐标值???
假设在一个圆上有一个三角形 ABC,其中 A 是圆心,B 和 C 是同一个圆的边界上的两点,关于这个三角形,我们知道以下几点:
现在的问题是:
如何求点 C (x3,y3) 的二维坐标值???
您可以将 B 点相对于 A 点旋转 52°(不要忘记使用弧度)。如果您需要向另一个方向旋转,请更改角度符号。
x3=x1+(x2-x1)*Cos(52)-(y2-y1)*Sin(52)
y3=y1+(x2-x1)*Sin(52)+(y2-y1)*Cos(52)
所以另一种看待它的方式可能是圆以 (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);