我目前正在使用“Pi - 角度”在 Y 轴上反映一个角度。我使用的角度系统是弧度,0 是东,-Pi/2 是北,Pi/2 是南,+/- Pi 是西,当我尝试使用上述方法来反映一个角度时,它经常返回高于 Pi 的值,超出范围。我怎样才能防止这种情况发生?
谢谢,
德力士
我目前正在使用“Pi - 角度”在 Y 轴上反映一个角度。我使用的角度系统是弧度,0 是东,-Pi/2 是北,Pi/2 是南,+/- Pi 是西,当我尝试使用上述方法来反映一个角度时,它经常返回高于 Pi 的值,超出范围。我怎样才能防止这种情况发生?
谢谢,
德力士
关于 x 轴的反射:只需使用-angle
.
关于 y 轴的反射:使用
if (angle >= 0)
return pi - angle
else
return -pi - angle
这会在 0 处创建一个分支切割:3° 映射到 177°,而 -3° 映射到 -177°。0 映射到 pi。(如果您需要不包括 +pi 的 [-pi,pi) 区间中的角度,请将“>=”更改为“>”。
正如您的问题陈述所暗示的,这还假设输入角度在 [-pi,pi] 范围内。如果不是,您需要先使用对称模 2*pi(其中smod(x,M) = mod(x+M/2,M) - M/2
)进行归一化。
首先将初始角度除以 Pi。因此,在 C 语言中:
angle = fmod(angle, 2*Pi);
if (angle < -Pi)
angle = angle + 2*Pi;
float inverted = Pi - angle;
问题是在进一步处理之前始终规范化您的输入。
由于整圆是 2*pi,因此您始终可以减去 2*pi 并使角度回到范围内。
你到底为什么选择北方作为-Pi/2。它打破了所有默认的东西,比如单位圆上的 sin(angle) = y 坐标。
但是要回答您的问题,您可以将 k*2Pi 添加到所有角度(其中 k 是任何整数),并且角度将保持不变。