将Java数学转换为C#的问题

时间:2015-04-26 20:49:40

标签: c# math

无论如何,数学不是我的强项;我不得不四处寻求使用Java工作的三角函数。但是现在我需要相同的功能;但是转移到了C#。

private static Position a = new Position(1,1);
private static Position b = new Position(1.5, 1.5);
public static float getAngle(Position me, Position target) {
    float angle = (float) Math.toDegrees(Math.atan2(target.getY() - me.getY(), target.getX() - me.getX()));
    if(angle < 0){
        angle += 360;
    }
    return angle;
}

环顾它看起来似乎没有C#有ToDegrees方法,我找到了Atan2方法,但没有ToDegrees,我完全迷失了。

很抱歉,如果这是一个非常荒谬的问题,但我对数学很恐怖,并且不理解所有的术语。

2 个答案:

答案 0 :(得分:4)

您可能想要编写自己的方法来将Radian转换为度数。这是一个简单的公式,似乎这就是为什么它被排除在库之外。

  

首先,C#.NET正在使用哪种角度模式,这有点令人困惑,但答案是弧度。

您需要编写数学转换器才能实现转换。

private double RadianToDegree(double angle)
{
   return angle * (180.0 / Math.PI);
}

private double DegreeToRadian(double angle)
{
   return Math.PI * angle / 180.0;
}

您可以阅读本文以获取进一步的帮助http://www.vcskicks.com/csharp_net_angles.php

根据你的例子,它应该是

public double getAngle(Vector2 me, Vector2 target) {
    return RadianToDegree(Math.Atan2(target.y - me.y, target.x - me.x));
}

答案 1 :(得分:3)

您可以创建自己的ToDegrees方法:

private double RadianToDegree(double angle)
{
   return angle * (180.0 / Math.PI);
}

例如:

double angle = DegreeToRadian(Math.Atan2(1.0,2.0));

为完整起见,这是相反的方法:

private double DegreeToRadian(double angle)
{
  return Math.PI * angle / 180.0;
}

您还可以查看执行类似转换的MSDN文档。