我试图在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 =度*(2 * pi)/ 360
关于c# - 将360°映射到-1和1之间的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33222545/