3 Stimmen

Algorithmus zur Erstellung einer Kreisbahn um eine zentrale Masse?

Ich versuche zu einfach Objekte um einen Mittelpunkt kreisen lassen, z. B.

Orbiting Objects

Die grünen und blauen Objekte stellen Objekte dar, die ihren Abstand zum Mittelpunkt beibehalten sollen, während sie rotieren, basierend auf einem Winkel, den ich in die Methode eingebe.

Ich habe versucht, eine Funktion in Objective-C zu erstellen, aber sie funktioniert nicht richtig ohne eine statische Zahl. z.B. (Sie dreht sich um den Mittelpunkt, aber nicht vom wahren Startpunkt oder Abstand zum Objekt aus).

-(void) rotateGear: (UIImageView*) view heading:(int)heading
{
    // int distanceX = 160 - view.frame.origin.x;
    // int distanceY = 240 - view.frame.origin.y;

    float x = 160 - view.image.size.width / 2 + (50 * cos(heading * (M_PI / 180)));
    float y = 240 - view.image.size.height / 2 + (50 * sin(heading * (M_PI / 180)));
    view.frame = CGRectMake(x, y, view.image.size.width, view.image.size.height);
}

Meine magische Zahlen 160 und 240 sind die Mitte der Leinwand, auf der ich die Bilder zeichne. 50 ist eine statische Zahl (und das Problem), die es der Funktion ermöglicht, teilweise korrekt zu arbeiten - ohne die Ausgangsposition des Objekts oder den korrekten Abstand beizubehalten. Ich weiß leider nicht, was ich hier schreiben soll.

heading ist ein Parameter, der eine Gradzahl von 0 bis 359 angibt. Er wird von einem Timer berechnet und außerhalb dieser Klasse inkrementiert.

Im Wesentlichen möchte ich ein beliebiges Bild auf meiner Leinwand ablegen können, das sich dann auf der Grundlage des Startpunkts des Bildes um den Mittelpunkt meines Kreises dreht. Das heißt, wenn ich ein Bild an einem Punkt ablegen würde (10,10) würde der Abstand zum Mittelpunkt des Kreises bestehen bleiben, wenn man (10,10) als Ausgangspunkt. Das Objekt würde sich um 360 Grad um den Mittelpunkt drehen und seinen ursprünglichen Ausgangspunkt erreichen.

Das erwartete Ergebnis wäre zum Beispiel, dass (10,10) in die Methode, ausgehend von Null Grad, und wieder heraus, ( 15,25 ) (nicht real) bei 5 Grad.

Ich weiß, das ist sehr einfach (und diese Problembeschreibung ist völlig übertrieben), aber ich schiele, wenn ich versuche, herauszufinden, wo ich etwas vermassle. Es ist mir egal, welche Sprachbeispiele Sie verwenden, wenn überhaupt. Ich werde in der Lage sein, Ihre Bedeutungen zu entschlüsseln.

Update zum Versagen

Ich bin schon weiter gekommen, aber ich komme immer noch nicht auf die richtige Berechnung. Mein neuer Code sieht wie folgt aus:

heading ist auf 1 Grad eingestellt.

-(void) rotateGear: (UIImageView*) view heading:(int)heading
{
    float y1 = view.frame.origin.y + (view.frame.size.height/2); // 152
    float x1 = view.frame.origin.x + (view.frame.size.width/2); // 140.5

    float radius = sqrtf(powf(160 - x1 ,2.0f) + powf(240 - y1, 2.0f)); // 90.13

    // I know that I need to calculate 90.13 pixels from my center, at 1 degree.      
    float x = 160 + radius * (cos(heading * (M_PI / 180.0f))); // 250.12
    float y = 240 + radius * (sin(heading * (M_PI / 180.0f))); // 241.57

    // The numbers are very skewed.
    view.frame = CGRectMake(x, y, view.image.size.width, view.image.size.height);
}

Ich erhalte Ergebnisse, die nicht annähernd dem entsprechen, was der Punkt sein sollte. Das Problem liegt in der Zuordnung von x und y. Wo mache ich einen Fehler?

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