在 Y 轴上反射角度

发布于 2024-10-09 18:41:39 字数 164 浏览 4 评论 0原文

我目前正在使用“Pi - 角度”反映 Y 轴上的角度。我使用的角度系统以弧度为单位,0 表示东,-Pi/2 表示北,Pi/2 表示南,+/- Pi 表示西,当我尝试使用上述方法来反映角度时,它经常出现返回高于 Pi 且超出范围的值。我怎样才能防止这种情况发生?

谢谢,

DLiKS

I'm currently to reflect an angle in the Y axis using 'Pi - angle'. The angle system I'm using is in radians, with 0 being east, -Pi/2 being north, Pi/2 being south and +/- Pi being west and when I try using the above method to reflect an angle, it frequently returns values above Pi, outside the range. How can I prevent this from happening?

Thanks,

DLiKS

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

一袭水袖舞倾城 2024-10-16 18:41:39

关于 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)进行标准化。

Reflection about the x-axis: just use -angle.

Reflection about the y-axis: use

   if (angle >= 0)
      return pi - angle
   else
      return -pi - angle

This creates a branch cut at 0: 3° maps to 177°, whereas -3° maps to -177°. 0 maps to pi. (If you require angles in the [-pi,pi) interval that excludes +pi, change the ">=" to ">".

This also assumes that the input angle is within the [-pi,pi] range, as your problem statement suggests. If not, you need to normalize using a symmetric modulo 2*pi (where smod(x,M) = mod(x+M/2,M) - M/2) first.

转瞬即逝 2024-10-16 18:41:39

首先将初始角度除以 Pi。因此,在 C 语言中:

angle = fmod(angle, 2*Pi);
if (angle < -Pi)
    angle = angle + 2*Pi;

float inverted = Pi - angle;

问题是在进一步处理之前始终规范您的输入。

By first having your initial angle modulo-divided by Pi. So, in C language:

angle = fmod(angle, 2*Pi);
if (angle < -Pi)
    angle = angle + 2*Pi;

float inverted = Pi - angle;

The thing is to always normalize your input before further processing.

渡你暖光 2024-10-16 18:41:39

由于整圆为 2*pi,因此您始终可以减去 2*pi 并使角度回到范围内。

Since full circle is 2*pi, you ca always subtract 2*pi and have the angle back in range.

油焖大侠 2024-10-16 18:41:39

你到底为什么选择北为-Pi/2。它打破了单位圆上所有默认的东西,比如 sin(angle) = y 坐标。

但要回答你的问题,你可以将 k*2Pi 添加到所有角度(其中 k 是任何整数),并且角度将保持不变。

Why on earth whould you choose north to be -Pi/2. It breaks all default stuf like sin(angle) = y coordinate on the unit circle.

But to answer your question you can add k*2Pi to all your angles (where k is any integer number) and the angle will stay the same.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文