映射360 & # 176;到-1到1之间的值

本文关键字:之间 映射 | 更新日期: 2023-09-27 18:18:34

我正在尝试在c#中转换一些旋转值。我希望能够让用户输入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

映射360 & # 176;到-1到1之间的值

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

z = sin(0…360)

x = cos(0…360)

当然,这取决于你的相机的坐标是如何标记的,它可能是完全相反的。

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

rad = deg * (2*pi)/360