【问题标题】:Precise angle calculation精确的角度计算
【发布时间】:2013-10-02 00:12:02
【问题描述】:

我正在做一个项目,我必须根据位置传感器的值来旋转轮胎。传感器提供从 261(-90 度)到 395(+90 度)的值。我正在使用TransformGroup,所以传感器的值几乎为 327,轮胎应该是直的和直立的。

当值为 395 时,轮胎将完全位于 X 轴上,与值为 261 的情况类似。我可以移动轮胎,但无法计算精确的角度。
我的计算方式就像我计算特定角度(比如 3)的默认值或零值(327)之间的值的数量。所以我得到了那个角度的值的数量。然后我将这个数字与角度(3度)相除。所以我得到一个值的角度。

float tempangle = value from sensor-zero value which is 327;
                tempangle = Math.Abs(tempangle);
                tempangle /= float.Parse(angle for reference say 3 degree);
                tempangle = 1 / tempangle;

在这里,我在传感器下放置了一些已知角度的物体(具有角度)。当我想为某个值找到某个角度时,我只需将该角度乘以该值和默认值(327)之间的值数。所以我得到了旋转身体的角度。
假设我在计算后得到了角度

angle for one sensor value =1.14286286 

假设我用计算器计算角度

1.14286286 *2=2.2857
1.14286286 *3=3.42858
1.14286286 *4=4.57145
1.14286286 *5=5.714314
1.14286286 *6=6.85717

如您所见,角度跳过了一些十进制值。有什么办法可以配合吗? 谢谢

【问题讨论】:

  • 使用double 而不是float
  • 我的意思是一个值是 2.2857,第二个值是 3.42858,如果我有可能在 2.2 之后获得像 2.5 这样的值,那么它不应该在 2.2 之后立即跨步到 3。我的方法无法在值之间进行计算。

标签: wpf math rotation transformation


【解决方案1】:

不知道我是否理解您的问题,但是从 261 到 395 范围内的输入值计算 -90 到 90 度之间角度的方法看起来像这样:

private static double SensorValueToAngle(double value)
{
    const double sensorMin = 261;
    const double sensorMax = 395;
    const double angleMin = -90;
    const double angleMax = 90;

    return angleMin + (angleMax - angleMin)
        * (value - sensorMin) / (sensorMax - sensorMin);
}

【讨论】:

  • (angleMax - angleMin) 是否与分子或分母相乘?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多