【发布时间】:2025-12-20 12:15:12
【问题描述】:
我有一个从 +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) );
但它仍然没有给出正确的结果,任何人都可以提出另一种方法吗?
【问题讨论】: