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,我完全迷失了。
很抱歉,如果这是一个非常荒谬的问题,但我对数学很恐怖,并且不理解所有的术语。
答案 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文档。