将 360° 映射到 -1 和 1 之间的值
Mapping 360° to a value between -1 and 1
我正在尝试在 C# 中为 Unity 转换一些旋转值。我希望能够让用户输入一个 0 到 360 度之间的值,并且这个值需要映射到两个轴,x 和 z。 x 和 z 轴都从 -1 到 1,我想知道如何将度数转换为所需的范围。这更令人困惑,因为只有两个轴共同决定旋转。
两个轴来自Camera.forward.x
和Camera.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
对于在 x-z 平面内旋转的单位圆 (r = 1),您可以使用两个参数方程确定 x 和 z。
z = sin(0...360)
x = cos(0...360)
当然,根据您的相机坐标的标记方式,它可能恰好相反。
编辑:还要确保您的数学函数是以度数模式而不是弧度模式计算的。如果他们以弧度计算,您可以使用以下公式将度数转换为弧度。
rad = deg * (2*pi)/360
我正在尝试在 C# 中为 Unity 转换一些旋转值。我希望能够让用户输入一个 0 到 360 度之间的值,并且这个值需要映射到两个轴,x 和 z。 x 和 z 轴都从 -1 到 1,我想知道如何将度数转换为所需的范围。这更令人困惑,因为只有两个轴共同决定旋转。
两个轴来自Camera.forward.x
和Camera.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
对于在 x-z 平面内旋转的单位圆 (r = 1),您可以使用两个参数方程确定 x 和 z。
z = sin(0...360)
x = cos(0...360)
当然,根据您的相机坐标的标记方式,它可能恰好相反。
编辑:还要确保您的数学函数是以度数模式而不是弧度模式计算的。如果他们以弧度计算,您可以使用以下公式将度数转换为弧度。
rad = deg * (2*pi)/360