我如何找到圆周上两点之间的所有角度

How do I find all the angles between two points on the circumference of a circle

我目前正在攻读计算机科学的高潮,但我被困住了,似乎找不到关于堆栈溢出问题的任何答案。

我要解决的问题是在屏幕上(1280 x 720,其中左上角是 (0, 0))上以 (x, y) 的形式存在三个给定点,您必须找到通过所有三个点的曲线。

所以,知道有三个点,就知道它们构成了一个三角形。找到外心后,你现在有:

曲线必须从第一个给定点开始,通过第二个给定点,并在第三个给定点结束。

int pointX = Math.round(circumcentreX + radius * Math.cos(angle));
int pointY = Math.round(circumcentreY + radius * Math.sin(angle));

以上是方程式我found在给定角度的情况下找到曲线上的点。

我也知道如何用 Math.atan2(y, x);

找到三个给定点的角度

我遇到的主要问题是找到曲线上的角度。到目前为止我有

float angle = (float)Math.toRadians(beginningAngle - (beginningAngle - endAngle) * t);

,其中 t 是它所在曲线的百分比,但它在一半时间不起作用。

圆的角度为北为 270 度,东为 0 度,南为 90 度,西为 180 度。

曲线应该是这样的

Angles: 183.57921 : 264.60202 : 358.09354 X coordinates: [473, 597, 747] Y coordinates: [376, 248, 380]

这是一个失败的例子

Angles: 179.00537 : 270.5897 : 2.6373901 X coordinates: [473, 614, 752] Y coordinates: [376, 234, 380]

如果您找到找到角度的方法或想要一些源代码,请告诉我。提前致谢!

在弄清楚导致错误的原因和有效方法之后,我最终得到了四个 if、else-if 和 else's 来解决我的问题。

float change;
float tba = (ba / 100 < 1) ? ba + 360 : ba;
float tma = (ma / 100 < 1) ? ma + 360 : ma;
float tea = (ea / 100 < 1) ? ea + 360 : ea;
    if(tba > tma && tma > tea && ea > ba)
        change = ea - ba - 360;
    else if(tba < tma && tma < tea && ea < ba)
        change = tea - ba;
    else if(ea < ba && ma < ba)
        change = ea - ba;
    else
        change = (ea - ba < 0f) ? ea - ba + 360 : ea - ba;
    change %= 360;

浮点数change是第一个角和第三个角的差值。浮点数 tbatmatea 只是 bamaea 的临时版本(它们是给定的点),以便比较角度更容易。例如,当ba为350°,ma为10°,ea为15°时,则分别为350°、370°、375°。 (在这种情况下,change 将是 25°)我不确定最后一行是否必要,但我将其保留在那里以防万一。

顺便说一下,我使用浮点数而不是双精度数的原因是 slick2D 通常将浮点数作为参数而不是双精度数。