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:
Die Abbruchbedingung ist das Problem:
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.:
Dann wäre die Bewegung auch sehr langsam, ich will allerdings eine Bewegung in der Geschwindigkeit
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!
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;
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: