示例:我有一个圆圈,分成两半。一半从0到-179,99999999999,而另一半从0到179,99999999999。典型示例:CALayer的transform.rotation.z。它不是从0到360,而是像那样滑落。
因此,当我想开发一个测量仪(例如理论上)时,我想要读取0到360之间的值,而不是获得-142并考虑0-360比例可能是什么。
如何在数学上正确转换?正弦?余弦?这有什么用处吗?
是不是通过以下简单的事情实现了规范化:
assert(value >= -180.0 && value <= +180.0);
if (value < 0)
value += 360.0;
如果我不止一个地方需要它,我可能会把它放到一个函数中。如果代码需要处理可能已经规范化的数字,那么您可以更改断言。如果它需要处理-180 .. + 360范围之外的数字,那么你还有更多工作要做(加上或减去360的适当倍数)。
while (x < 0) {
x = x + 360;
}
while (x > 360) {
x = x - 360;
}
这将适用于任何正面或负面的价值。
((value % 360) + 360) % 360
(value % 360)
使它达到-359到359。+ 360
删除任何负数:现在值1到719% 360
使其为0到359假设x
是带范围的值(-180,180),y
是你想要显示的值,
y = x + 180;
这会将移位读数更改为范围(0,360)。
如果你不介意在已经为正的值上花费一些额外的CPU周期,这应该适用于任何值-360 <x <360:
x = (x + 360) % 360;
我提供代码从this answer中的图层变换属性返回0 - 360度角度值到你的previous question。