我有一个从 +PI 到 -PI 弧度的数据值。
我需要获得从旧值到新值所需的最小旋转(以弧度为单位),例如:
float rotationRequired(float oldValue, float newValue){
return newValue - oldValue;
}
但简单地减去是行不通的,因为从 -179 度到 +179 度不需要旋转一整圈,只需顺时针旋转 2 度。因为 -PI = +PI 在一个圆圈中在技术上是相同的旋转。此外,这些值可以在任何范围内,即 740 = 360 + 360 + 20,因此只有 20。
我正在考虑将值分解为sin
值cos
,然后减去atan
:
double oldY = Math.sin(oldValue);
double oldX = Math.cos(oldValue);
double newY = Math.sin(newValue);
double newX = Math.cos(newValue);
float delta = (float) Math.atan2( (newY - oldY),(newX - oldX) );
但是它仍然没有给出正确的结果,有人可以提出另一种方法吗?