42 Stimmen

Berechnen von Punkt auf einem Kreisumfang von Winkel in C#?

Ich kann mir vorstellen, dass dies eine einfache Frage ist, aber ich erhalte einige seltsame Ergebnisse mit meinem aktuellen Code und ich habe nicht den mathematischen Hintergrund, um vollständig zu verstehen, warum. Mein Ziel ist einfach, wie im Titel angegeben: Ich möchte nur den Punkt in einem bestimmten Abstand und Winkel von einem Mittelpunkt finden.

Mein aktueller Code:

Point centerPoint = new Point ( 0, 0 );
Point result      = new Point ( 0, 0 );
double angle      = 0.5; //between 0 and 2 * PI, angle is in radians
int distance      = 1000;

result.Y = centerPoint.Y + (int)Math.Round( distance * Math.Sin( angle ) );
result.X = centerPoint.X + (int)Math.Round( distance * Math.Cos( angle ) );

Im Allgemeinen scheint dies ziemlich vernünftig zu funktionieren, aber ich bekomme Probleme an verschiedenen Stellen, vor allem, wenn der Winkel Punkte in der negativen x und y-Achse entspricht. Offensichtlich tue ich etwas falsch - Gedanken darüber, was das ist?

UPDATE: Das war mein Fehler, dieser Code funktioniert einwandfrei - die wenigen Ausreißer, die nicht funktionierten, waren tatsächlich auf einen Fehler in der Art und Weise zurückzuführen, wie der Winkel für 1,5PI berechnet wurde. Ich dachte, ich hätte das gut genug überprüft, aber offensichtlich war das nicht der Fall. Vielen Dank an alle, die sich die Zeit genommen haben, und ich hoffe, dass der obige funktionierende Code für andere hilfreich ist.

-1voto

Andrea Ambu Punkte 36268

Ich kenne c# nicht, jedenfalls wenn Sie versuchen, die Punkte irgendwo zu zeichnen, müssen Sie die Tatsache berücksichtigen, dass die Y-Achse von oben nach unten des Bildschirms knicken, so dass Ihre Sünde Element sollte sein -sin(...) und nicht +sin(...)

also

result.Y = centerPoint.Y + (int)Math.Round( distance * Math.Sin( angle ) );

werden sollte:

result.Y = centerPoint.Y - (int)Math.Round( distance * Math.Sin( angle ) );

Wenn du nicht versuchst, sie zu zeichnen, kann ich mir nicht vorstellen, was das Problem ist, kannst du ein Beispiel nennen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X