【问题标题】:Converting radians to degrees with C#使用 C# 将弧度转换为度数
【发布时间】:2020-04-09 21:47:35
【问题描述】:

我正在使用 C# 在 Unity 中创建一个小游戏,我不允许使用任何内置的物理或碰撞器。我所拥有的是一个平台,上面有一个重量物体。使用箭头键,您可以倾斜平台角度。然后顶部的重量应该对给定的倾斜角度做出相应的反应。我用摩擦力、最大摩擦力、法向力等计算了一切。不起作用的是当你按下一个键来改变倾斜度时,物体上的力应该相应地改变,如果重物上的力大于最大摩擦力,那么重物应该移动。这是我的代码的简化示例。

public float m = 35;

public float µ = 0.15f;

public float g = 9.82f; //(N/kg)

public float N;

public double deg = 0;

Fmax = m * g * µ;

if (Input.GetKeyDown(KeyCode.UpArrow)) {
   deg++;
   N = m * g * µ * (Math.Cos(deg) * (180.0 / Math.PI));
   platform.transform.Rotate(0, 0, deg, Space.Self);

} else if (Input.GetKeyDown(KeyCode.DownArrow)) {
   deg--;
   N = m * g * µ * (Math.Cos(deg) * (180.0 / Math.PI));
   platform.transform.Rotate(0, 0, deg, Space.Self);
}

if(N > Fmax) {
 // Do the rest of the code
}

我认为问题与 Math.Cos(deg) 将 deg 转换为弧度有关,但我随后尝试将 reg 转换回 deg 为:(180.0 / Math.PI)。我可以让一切都在我的计算器上工作,但不能在代码中工作。

【问题讨论】:

  • 你的意思是 rad(ians) 到 deg(rees) 吗?不确定reg 是什么。如果您的意思是弧度,那么 Unity 会在 Mathf 库中对该内置进行转换。 Mathf.Rad2DegMathf.Deg2Rad docs.unity3d.com/ScriptReference/Mathf.Rad2Deg.html docs.unity3d.com/ScriptReference/Mathf.Deg2Rad.html
  • 是的对不起我的意思是弧度到度数
  • 你需要Math.Cos(deg * Math.PI / 180)。 Math.Cos 采用弧度表示参数。
  • 我建议只对浮点数使用double。你从float 得到的唯一东西就是这种情况下的问题。参考:Float vs Double Performance.
  • @Krullmizter 它与 Remy_rm 已经建议的完全相同:Mathf.Cos(deg * Mathf.Deg2Rad) 因为它返回的结果与Math.PI / 180 完全相同。注意通用c#库Math和Unity内置Mathf是有区别的!

标签: c# unity3d math game-physics physics


【解决方案1】:

这是不正确的:

   N = m * g * µ * (Math.Cos(deg) * (180.0 / Math.PI));

如果角度以度为单位,则必须将其转换为弧度并传递余弦函数:

double rad = deg*Math.PI/180.0;
N = m*g*mu*Math.Cos(rad);

【讨论】:

    【解决方案2】:

    您可以使用 Mathf.Deg2Rad 和 Mathf.Rad2Deg 常量轻松地将弧度转换为度数以及度数转换为弧度

    using UnityEngine;
    
    public class Example : MonoBehaviour
    {
        // convert 1 radian to degrees
    
        float rad = 10.0f;
    
        void Start()
        {
            float deg = rad * Mathf.Rad2Deg;
            Debug.Log(rad + " radians are equal to " + deg + " degrees.");
        }
    }
    

    【讨论】:

      【解决方案3】:

      有一个超级方便的函数叫做 Mathf.Rad2Deg 和 Mathf.Deg2Rad。它们将弧度转换为度数,将度数转换为弧度。

      【讨论】:

      • 那些不是函数,它们是字段。
      猜你喜欢
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      相关资源
      最近更新 更多