将360°映射到介于-1和1之间的值

时间:2015-10-19 19:39:53

标签: c# math unity3d rotation

我正在尝试在C#中为Unity转换一些旋转值。我希望能够让用户输入0到360度之间的值,并且该值需要映射到两个轴x和z。 x轴和z轴都从-1到1,我想知道如何将度数转换为所需的范围。这更令人困惑,因为只有两个轴一起决定旋转。

这两个轴来自Camera.forward.xCamera.forward.z。我当然可以为两个轴输入介于-1和1之间的值,但输入0到360之间的度数会更自然。我怎么做到这一点?

更新

我的代码现在看起来像是将度数转换为x和z的弧度:

// rotation is a value between 0.0 and 360.0
float rad = rotation * Mathf.Deg2Rad;
float z = Mathf.Sin(rad);
float x = Mathf.Cos(rad);
Debug.Log(x + "   " + z);

但是,根据旋转值,结果并不总是在-1和1之间。例如:

  • 如果我将轮换设为0,我会x:1 z:0
  • 如果我将其设置为360,我会x:1 z:1.748456E-07
  • 如果我将其设置为90,我会x:-4.371139E-08 z:0

那里发生了什么?

更新日志:

rotation:0    rad:0         z:0              x:1
rotation:90   rad:1.570796  z:1              x:-4.371139E-08
rotation:180  rad:3.141593  z:-8.742278E-08  x:-1
rotation:360  rad:6.283185  z:1.748456E-07   x:1

1 个答案:

答案 0 :(得分:3)

对于旋转位于x-z平面的单位圆(r = 1),您可以使用两个参数方程确定x和z。

z = sin(0 ... 360)

x = cos(0 ... 360)

当然,根据相机的坐标标记方式,可能正好相反。

编辑:还要确保您的数学函数在度数模式下计算而不是弧度。如果它们以弧度计算,您可以使用以下公式将度数转换为弧度。

rad = deg *(2 * pi)/ 360