我正在用 C
编写 LunarLander
。
我的船在 PI/2
和 -PI/2
之间旋转。每步旋转为PI/20
。我需要一种方法来检测我的船何时旋转 1 弧度。因此,当旋转 1 弧度时,燃料使我减少 1 个单位。
我的想法是先将我的角度传递为度数,然后看看角度是否大于57,因为1弧度是57度。 但我无法将其写入我的程序中,因为这个想法不完整。 虽然这只是我的想法,但我认为解决方案来自那一边,与那些 57 度相比
while(1)
//code
case SDLK_RIGHT:
angle += SHIP_ROTATION_PER_STEP;
if(angle > (PI/2)){
angle = (PI/2);
break;
}
break;
case SDLK_LEFT:
angle -= SHIP_ROTATION_PER_STEP;
if(angle < -(PI/2)){
angle = -(PI/2);
break;
}
break;
//code
//during the while
我需要一个想法来比较我的船移动的幅度是否只有 1 弧度。如果每步的旋转总和大于 1 弧度。但我想不出怎么办
最佳答案
保留一个累加器total_angle
。每当船向任一方向旋转时,添加旋转的绝对值。假设您的旋转采用浮点 double
类型,这意味着:
total_angle += fabs(angle); /* angle is the increment in angle */
假设 angle
和 total_angle
只是直接测量弧度,而不是某种缩放的整数版本或其他形式。在这种情况下,每当 total_angle
达到或超过 1.0
时,我们就会减去一个单位的燃料。同时,我们从累加器中减去 1.0
:
if (total_angle >= 1.0) {
fuel--;
total_angle -= 1.0;
}
我们假设单次旋转不大于一个弧度,否则我们必须将其设为 while 循环。
关于c - 如何检测旋转的弧度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57190188/