atan2 Problem??
-
Hallo, ich habe ein Problem mit der Funktion atan2.
Und zwar versuche ich die Linien zu verbinden damit alles symmetrisch aussieht.
Momentan sieht es so aus:
http://puu.sh/lO6wS/53e9b571e9.png
Der Code zur Berechnung:
CPoint ptLineStart = pItem->Rect.CenterPoint(); CPoint ptLineEnd = pNextItem->Rect.CenterPoint(); CPoint ptCartesianStart = CPoint(ptLineStart.x - (GetWindowRect().Width() / 2), -(ptLineStart.y + GetWindowRect().Height() / 2)); CPoint ptCartesianEnd = CPoint(ptLineEnd.x - (GetWindowRect().Width() / 2), -(ptLineEnd.y + GetWindowRect().Height() / 2)); DOUBLE dRadian = _GetRadian(ptCartesianStart, ptCartesianEnd);
_Check_return_ DOUBLE _GetRadian(_In_ CONST CPoint ptStart, _In_ CONST CPoint ptEnd) { DOUBLE dAngle = D3DXToDegree((atan2(ptEnd.y - ptStart.y, ptEnd.x - ptStart.x) * (-1.0f))); if (dAngle < NULL) dAngle += 360.0f; return D3DXToRadian(dAngle); }
Der Wert, der zurückgegeben wird von _GetRadian wird später mit D3DXMatrixRotationZ verrechnet und dann gezeichnet.
Was genau mache ich falsch? Man sieht das die Linien nicht genau übereinander lappen.
Danke schon mal für eure Antworten
-
dAngle < NULL
Das ist doch wohl nicht dein Ernst!
Warum nimmst du an, dass das Problem atan2 und nicht irgend eine andere Berechnung ist?
Vermutlich falsches Forum, du stellst jedenfalls keine C++ Frage.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
manni66 schrieb:
dAngle < NULL
Das ist doch wohl nicht dein Ernst!
Warum nimmst du an, dass das Problem atan2 und nicht irgend eine andere Berechnung ist?
Vermutlich falsches Forum, du stellst jedenfalls keine C++ Frage.
Ich habe nirgendwo behauptet das es an atan2 liegt. Ich habe lediglich gesagt das ich ein Problem mit der Funktion habe.
Ich weiß nicht wieso das von dir zitierte Code-Schnipsel nicht mein ernst sein sollte.
Bitte nur antworten die mir auch wirklich weiter helfen, danke.@Mod Danke für das Verschieben.
-
manni66 schrieb:
dAngle < NULL
Das ist doch wohl nicht dein Ernst!
Warum nimmst du an, dass das Problem atan2 und nicht irgend eine andere Berechnung ist?
Vermutlich falsches Forum, du stellst jedenfalls keine C++ Frage.
_Check_return_ DOUBLE _GetRadian(_In_ CONST CPoint ptStart, _In_ CONST CPoint ptEnd) { DOUBLE dAngle = D3DXToDegree((atan2(ptEnd.y - ptStart.y, ptEnd.x - ptStart.x) * (-1.0f))); if (dAngle < 0.0f) dAngle += 360.0f; return D3DXToRadian(dAngle); }
Besser? Ändert jedenfalls nichts am Resultat.
-
PFFFFF schrieb:
Hallo, ich habe ein Problem mit der Funktion atan2.
PFFFFF schrieb:
Ich habe nirgendwo behauptet das es an atan2 liegt.
Na dann ...
Ich würde durch 2.0 statt durch 2 teilen. Keine Ahnung, ob es das Problem behebt ...
-
manni66 schrieb:
PFFFFF schrieb:
Hallo, ich habe ein Problem mit der Funktion atan2.
PFFFFF schrieb:
Ich habe nirgendwo behauptet das es an atan2 liegt.
Na dann ...
Ich würde durch 2.0 statt durch 2 teilen. Keine Ahnung, ob es das Problem behebt ...
Genau, ich habe ein Problem mit der Nutzung von atan2 :P. Nicht mit atan2 selbst.
Ich habe es zu 2.0 geändert, es hat sich leider nichts verändert.
-
Das scheint mir mehr ein Problem mit der Zeichenroutine zu sein (setze mal die Zeichendicke auf 1, ob dann die Spiegelung korrekt ist).
-
Th69 schrieb:
Das scheint mir mehr ein Problem mit der Zeichenroutine zu sein (setze mal die Zeichendicke auf 1, ob dann die Spiegelung korrekt ist).
Danke für deine Antwort, daran habe ich gestern auch schon gedacht. Leider hat dies auch nichts am Resultat geändert.
-
Dann mußt du das wohl mal anhand eines konkreten Beispiels durchdebuggen (oder dir für jeden Berechnungsschritt die Werte mal loggen - ob es ein int/double-Konvertierungsproblem ist).
Vereinfache dazu am besten deinen Code, so daß du z.B.(GetWindowRect().Width() / 2
nur einmal berechnest (und in einer Variablen speicherst - gleiches gilt für deine weiteren Berechnungen).