【发布时间】:2010-12-30 19:20:20
【问题描述】:
我目前正在使用“Pi - 角度”在 Y 轴上反映一个角度。我使用的角度系统是弧度,0 是东,-Pi/2 是北,Pi/2 是南,+/- Pi 是西,当我尝试使用上述方法来反映一个角度时,它经常返回高于 Pi 的值,超出范围。我怎样才能防止这种情况发生?
谢谢,
DLiKS
【问题讨论】:
标签: math trigonometry angle
我目前正在使用“Pi - 角度”在 Y 轴上反映一个角度。我使用的角度系统是弧度,0 是东,-Pi/2 是北,Pi/2 是南,+/- Pi 是西,当我尝试使用上述方法来反映一个角度时,它经常返回高于 Pi 的值,超出范围。我怎样才能防止这种情况发生?
谢谢,
DLiKS
【问题讨论】:
标签: math trigonometry angle
关于 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 是任何整数),角度将保持不变。
【讨论】: