Ich versuche zu einfach Objekte um einen Mittelpunkt kreisen lassen, z. B.
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?