如何将负旋转值交换为正旋转值?

问题描述 投票:0回答:6

示例:我有一个圆圈,分成两半。一半从0到-179,99999999999,而另一半从0到179,99999999999。典型示例:CALayer的transform.rotation.z。它不是从0到360,而是像那样滑落。

因此,当我想开发一个测量仪(例如理论上)时,我想要读取0到360之间的值,而不是获得-142并考虑0-360比例可能是什么。

如何在数学上正确转换?正弦?余弦?这有什么用处吗?

iphone math core-graphics
6个回答
3
投票

是不是通过以下简单的事情实现了规范化:

assert(value >= -180.0 && value <= +180.0);
if (value < 0)
    value += 360.0;

如果我不止一个地方需要它,我可能会把它放到一个函数中。如果代码需要处理可能已经规范化的数字,那么您可以更改断言。如果它需要处理-180 .. + 360范围之外的数字,那么你还有更多工作要做(加上或减去360的适当倍数)。


2
投票
while (x < 0)  {
  x = x + 360;
  }

while (x > 360) {
  x = x - 360;
  }

这将适用于任何正面或负面的价值。


1
投票
((value % 360) + 360) % 360
  • 第一个(value % 360)使它达到-359到359。
  • + 360删除任何负数:现在值1到719
  • 最后一个% 360使其为0到359

0
投票

假设x是带范围的值(-180,180),y是你想要显示的值,

  y = x + 180;

这会将移位读数更改为范围(0,360)。


0
投票

如果你不介意在已经为正的值上花费一些额外的CPU周期,这应该适用于任何值-360 <x <360:

x = (x + 360) % 360;

0
投票

我提供代码从this answer中的图层变换属性返回0 - 360度角度值到你的previous question

© www.soinside.com 2019 - 2024. All rights reserved.