2015-04-26 47 views
0

數學不是我的強項,我不得不四處詢問,以獲得在Java中工作的三角函數。但是現在我需要相同的功能;但是轉移到C#。將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我完全喪失。

對不起,如果這是一個非常荒謬的問題,但我對數學很恐怖,不理解所有的術語。

回答

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進行類似轉換的文檔。

+0

由於要試試這個。 – Hobbyist

+0

有關說明:1圈= 360度= 2 pi(弧度) – Koopakiller

+0

正確的術語「DegreeToRadian」或「RadianToDegree」? – Hobbyist

2

您可能希望編寫自己的方法將Radian轉換爲Degrees。這是一個簡單的公式,似乎這就是爲什麼它被排除在圖書館之外的原因。

首先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)); 
} 
+0

親愛的,在Math.Atan2中使用這些參數(例如)返回角度爲0.999906049801551 *,其中應爲45.0 *。 '調試。Log(「Angle:」+ Math.Cos(DegreeToRadian(Math.Atan2(b.y - a.y,b.x - a.x))));' – Hobbyist

+0

@ Christian.tucker你在這裏傳遞的值是什麼? b.y,a.y,b.x和a.x? –

+0

http://pastebin.com/yVVhw2Qr 與我的Java示例相同。 (向量中的第一個值是X,第二個值是Y) – Hobbyist