我目前正在研究计算机科学,最终陷入困境,似乎找不到关于堆栈溢出的类似问题的任何答案。
我要解决的问题是屏幕上有三个给定的点(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]
如果您找到了找到角度的方法或想要一些源代码,请告诉我。预先谢谢你!
答案 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
是第一个角度和第三个角度之间的差。浮点数tba
,tma
和tea
只是ba
,ma
和ea
(它们是给定的点),以便比较角度。例如,当ba
为350°且ma
为10°且ea
为15°时,它们分别可以为350°,370°和375°。 (在这种情况下,{change
应该是25°)我不确定最后一行是否必要,但我会保留在最后以防万一。
顺便说一句,我使用浮点数而不是双精度点的原因是slick2D通常将浮点数作为参数而不是双精度点。