2010-11-12 21 views
5

In meinem Code:Warum gibt Math.Cos den falschen Wert zurück?

Vector2 colCircle = new Vector2(); 

colCircle = new Vector2((R * Math.Sin(D)), -(R * Math.Cos(D))); 

While:

R = 22.627 
D = 89.214 

Wenn auf meinem Rechner überprüft, ist der X-Wert korrekt, aber der Y-Wert sollte -0,310 sein, aber in Programm ist es -7,134.

Irgendwelche Ideen warum?

+1

Ich kann Ihre Werte nicht duplizieren, aber es kann hilfreich sein, zu wissen, dass die .net-Triggerfunktionen (wie in den meisten Math-Bibliotheksimplementierungen) Winkelparameter im Bogenmaß erwarten. – warrenm

+0

Ich denke, es ist interessant, wie nahe der X-Wert des Programms dem tatsächlichen mit Radiant war. – Bloodyaugust

+0

_Ich denke, es ist interessant, wie nahe der X-Wert des Programms dem tatsächlichen mit Radiant war._ Die Sinus-Funktion ist maximal, '+ 1', im Winkel von' 28.5 * π' genau. Das ist '89.535' Radianten. –

Antwort

23

Die trigonometrischen Funktionen erwarten Radianten, nicht Grad.

+0

In der Tat. Ugh ... Das ist völlig dumm von mir. – Bloodyaugust

+1

Ja - 2 Pi (rad) = 360 (Grad) – Marco

+0

Warum also Math.Cos (90 * Math.Pi/180) einen seltsamen Wert anstelle von 0 zurückgeben? –

4

ersetzen, was Sie haben mit

colCircle = new Vector2((R * Math.Sin(D*Math.PI/180.0)), -(R * Math.Cos(D*Math.PI/180.0))); 

und Sie sollten in Ordnung sein. Cos/Sin erwarten Radianten nicht Grade.

+2

Eigentlich war MathHelper.ToRadians schneller zu implementieren. – Bloodyaugust

Verwandte Themen