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

时间:2018-12-28 04:13:37

标签: java math trigonometry

我目前正在研究计算机科学,最终陷入困境,似乎找不到关于堆栈溢出的类似问题的任何答案。

我要解决的问题是屏幕上有三个给定的点(x,y)(1280 x 720,左上角为(0,0)),您必须找到一条曲线穿过所有三个点。

因此,知道了三个点,便知道它们形成一个三角形。找到周围的中心之后,您现在可以:

  • 半径
  • 起源
  • 三个角度

曲线必须从第一个给定点开始,经过第二个给定点,然后在第三个给定点处结束。

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

上面是等式I 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]

如果您找到了找到角度的方法或想要一些源代码,请告诉我。预先谢谢你!

1 个答案:

答案 0 :(得分:0)

在弄清楚什么会导致错误和什么能解决问题之后,我最终得到了四个if,else-if和else来解决我的问题。

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通常将浮点数作为参数而不是双精度点。