c# - 将 360° 映射到 -1 到 1 之间的值

标签 c# math unity-game-engine 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

最佳答案

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

z = sin(0...360)

x = cos(0...360)

当然,根据相机坐标的标记方式,情况可能完全相反。

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

rad = 度 * (2*pi)/360

关于c# - 将 360° 映射到 -1 到 1 之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33222545/

相关文章:

c# - WCF - 发布 JSON 对象

algorithm - 联立方程的最小二乘解

c# - 是不是不能使用父类的事件呢?

android - 什么可能导致我的 Android Unity 游戏自发重新启动?

python - 如何检查 NaN 值?

unity-game-engine - 获取当前unity3d版本

c# - 正确地将嵌套类型转换为接口(interface)

c# - 如何将选定的TreeView项目传递给RelayCommand,而无需后面的代码

c# - 防止 SQL 重复预订

python - 如何在仍然能够索引的同时抑制评估?