Bogemaß vs. Grad

ara-art

Mitglied
Hallo,
seit einigen Tagen finde ich leider keine Lösung für folgendes Problem:

Ich habe eine Funktion geschrieben, die mehrere MCs um einen Mittelpunkt kreisen lässt.
Eine weitere Funktion soll diese MCs auf ihrer Kreisbahn zu einem bestimmten Winkel bewegen und anhalten.

Dies Funktion sieht zur Zeit so aus:
PHP:
function bewegen(mv, zielWinkel) {
mv.onEnterFrame = function() {	

			mv.z = mv.z+0.1; //// z ist ein Zähler, 0.1 der Schritt um den der Winkel vergrößert wird
			mv._x = mittelx - (Math.cos(mv.z)*mv.abstand); /// abstand zum Dreh-Mitelpunkt
			mv._y = mittely - (Math.sin(mv.z)*mv.abstand);
			
			if (mv.z >= 6.283185307) {   //// 6.2831 entspricht einer vollen Drehung in Bogemaß
			  mv.z = 0;
			}
			/// die Abbruchbedingung
			if ( (mv.z >= ((zielWinkel-1)*Math.PI/180)) and ( mv.z <= ((zielWinkel+1)*Math.PI/180)) ) {
				// hier habe ich einen Ziel-Bereich um den Zielwinkel erstellt
				delete mv.onEnterFrame;
			}
			///// Lösungsidee:
			///// das ganze läuft 2mal ab, damit die abbruchfrage auf 0.1 genau ist, die drehgeschwindigkeit aber trotzdem bei 0.2 liegt
			mv.z = mv.z+0.1;
			mv._x = mittelx - (Math.cos(mv.z)*mv.abstand);
			mv._y = mittely - (Math.sin(mv.z)*mv.abstand);
			if ( (mv.z >= ((zielWinkel-1)*Math.PI/180)) and ( mv.z <= ((zielWinkel+1)*Math.PI/180)) ) {
				delete mv.onEnterFrame;
			}

 } // ende enterframe
} // ende funktion bewegen


Die Abbruchbedingung ist das Problem:
PHP:
if ( ((mv.z *180/Math.PI) >= zielWinkel-1) and ( (mv.z *180/Math.PI) <= zielWinkel+1) ) {
				delete mv.onEnterFrame;
			}

Da der Winkel quasi "zu grob" erhöht wird, wird die Bedingung ab und zu nicht erfüllt.
Damit hält die Kreisbewegung dann nicht an.
Wenn ich den Winkel feiner erhöhen würde, also z.B.:
PHP:
mv.z = mv.z+0.001;
Dann wäre die Bewegung auch sehr langsam, ich will allerdings eine Bewegung in der Geschwindigkeit
PHP:
mv.z = mv.z+0.2;

Den Abbruch-Bereich zu erhöhen würde zwar die Bewegung abbrechen lassen, aber dann sind mir die MCs zu weit von ihrem Zielwinkel entfernt.

Eine Lösungsidee wären mehrere Abbruchbedingungen, nach dem der Winkel fein erhöht wurde. Allerdings reicht es dabei nicht das ganze zweimal zu machen (mit z = z+0.1).
Man müsste das ganze sehr viel häufiger machen und das geht dann aus Performance-Gründen nicht.

Ich fürchte mein Problem ist evtl. etwas schwer verständlich, aber vielleicht kann mir ja doch jemand helfen.
Mathematiker an die Front! :)
 
Zuletzt bearbeitet:
Hi,

probiers mal so:
Code:
            mv.oz = mv.z;
            mv.z = mv.z + 0.1;
            // Abbruchbedingung:
            if (mv.z == mv.oz) {
                delete mv.onEnterFrame;
            }

Gruß
.
 
Hallo,
danke Tobias für deine Antwort,
leider scheint das allerdings auch nicht zu funktionieren.
Die Abbruchbedingung ist auf diese Weise nie erfüllt.

Zum besseren Verständnis habe ich hier mal das Ganze hochgeladen:
(Auf den Kreis in der Mitte klicken zum Aufruf der "Problemfunktion")
Beispiel

Und hierauch die .fla:
http://www.hannestank.de/sphere/sphere_00.fla
Wobei die relevanten Funktionen in den ersten beiden Frames liegen.
("init bewegen" und "bewegen" .. ich weiß meine Programmierstruktur lässt stark zu wünschen übrich)
 
Zuletzt bearbeitet:
Ich hab eine mögliche Lösung gefunden, wie üblich nicht schön aber es funktioniert:
PHP:
if ( ((mv.z *180/Math.PI) >= zielWinkel-6) and ( (mv.z *180/Math.PI) <= zielWinkel+6) ) {
				// hier habe ich einen sehr großen Ziel-Bereich um den Zielwinkel erstellt
				winkel = zielWinkel * Math.PI/180;
				mv._x = mittelx - (Math.cos(winkel)*mv.abstand); 
			        mv._y = mittely - (Math.sin(winkel)*mv.abstand);
				delete mv.onEnterFrame;
			}

Diese Lösung ist etwas unsauber, da der MC evtl eine Strecke "Springt", denn wenn sein Winkel im Abbruch-Intervall ist wird der Winkel einfach auf den Zielwinkel gesetzt.
Sieht man bei der Geschwindigkeit aber sowieso nicht.

Wäre trotzdem schön, wenn jemand noch auf eine sauberere Lösung kommt, am besten ohne das Intervall.
 
Hi,

ich bräuchte 1. die xml-Datei, um den Film auszuführen, und 2. eine genaue Vorstellung davon, wie das Endergebnis aussehen soll. Aus der Onlineversion kann ich nicht viel entnehmen; die Dinger schwirren da irgendwie unmotiviert in der Gegend herum ... ;)

Gruß
.
 
Hallo Tobias,

hier wäre die XML-Datei zu finden:
http://www.hannestank.de/sphere/xml/bobbles.xml
Allerdings stehen da nur irrelevante Informationen über die die Kreise drin.
(Radius, Abstand zur Mitte,..etc)

Hier ein JPG wie ich mir die Anordnung in etwa vorstelle:
http://www.hannestank.de/sphere/test_anordnung.jpg

Und hier meine Lösung, mit der ich jetzt erstmal weiterarbeite:
http://www.hannestank.de/sphere/index_00.html

Sobald ich eine feinere Anordnung der Strahlen brauche, habe ich wieder ein Problem,
da mit meiner Lösung nur eine Aufteilung alle 12 Grad möglich ist.
 
Bei meiner jetzigen Lösung funktioniert es meistens.... aber nicht immer.
Und ich habe keinen Plan aus welchem Grund er die Kreise ab und zu richtig anordnet und ab und zu falsch...

@Tobias: Hast dir das nochmal angeguckt und hast vielleicht einen Vorschlag?
 
Zurück