Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-08-2003, 20:44   #1 (permalink)
NordischByNature
 
Benutzerbild von MarcusK
 
Registriert seit: Sep 2002
Ort: Bremen
Beiträge: 125
Wegberechnung - Mathematische Lösung

Hi zusammen!

Hier mal eine Frage, die mehr in den mathematischen Bereich passen würde...

Ich habe ein Objekt (P) und einen Zielpunkt (T). Beide liegen in einem Koordinatensystem (das von Flash). Nun soll P langsam in Richtung T wandern...Schritt für Schritt.

Mir fallen dazu 2 Ansätze ein. Der erste ist, vorher erstmal die Hypothenuse zu berechnen und zu schauen, ob der nächste Schritt nicht schon über das Ziel hinausgeht. Falls nicht, normiert man die X- und Y-Koordinaten und berechnet den Winkel zum Ziel T (Einheitskreis - wegen arcsin). Aus dem Winkel berechnet man dann die neuen Koordinaten.

Der zweite ist etwas weit hergeholt. Man berechnet die Hypothenuse, zieht die Wurzel, verteilt das Ergebnis im Verhältnis der Eingangswerte (X/Y) und zieht dann nocheinmal die Wurzel aus den beiden Komponenten. Dabei muß man darauf achten, daß auch das Verhältnis quadriert. Etwas umständlich.

Hat jemand noch eine, vielleicht einfachere, Idee?

Gruß,
Marcus
MarcusK ist offline   Mit Zitat antworten
Alt 28-08-2003, 21:13   #2 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Zürich
Beiträge: 1.776
yo, umständlich ist wohl das richtige wort.
am einfachsten: anzahl der schritte festlegen,

strecke teilen: das gute ist, dass der x-wert ja bereits der ankathete, der y-wert der gegenkathete des von dir gesuchten winkels entspricht (deswegen arbeiten wir ja auch so gern mit orthogonalen koordinatensystemen, wenn wir nicht gerade waldorfschüler sind)

also gilt: einzelschritt in x-richtung ergibt sich aus x(p) -x(t)
(p und t als indizes - lässt sich hier nicht notieren).
für die y-koordinaten entsprechend.

damit kriegst du ne gleichförmige bewegung hin. alle möglichen beschleunigungen (inkl. abbremsen) kannst du dir bei robert penners "easing equations" nach diesem prinzip gut selber rausfuchsen...

http://robertpenner.com/easing/
fresh ist offline   Mit Zitat antworten
Alt 28-08-2003, 21:19   #3 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
ActionScript:
  1. ziel = random(550);
  2. move = function () {
  3.     with (mc) {
  4.         if (_x<ziel) {
  5.             _x += 10;
  6.             if (_x>ziel) {
  7.                 _x = ziel;
  8.                 clearInterval(inter);
  9.             }
  10.         }
  11.         if (_x>ziel) {
  12.             _x -= 10;
  13.             if (_x<ziel) {
  14.                 _x = ziel;
  15.                 clearInterval(inter);
  16.             }
  17.         }
  18.     }
  19. };
  20. inter = setInterval(move, 500);



...naja, die y-achse noch mit rein, fertig.




<edit....oups.....das sieht ja aber gurke aus...da muß ich wohl noch mal drüber nachdenken....</edit>

Geändert von warrantmaster (28-08-2003 um 21:23 Uhr)
warrantmaster ist offline   Mit Zitat antworten
Alt 28-08-2003, 21:20   #4 (permalink)
NordischByNature
 
Benutzerbild von MarcusK
 
Registriert seit: Sep 2002
Ort: Bremen
Beiträge: 125
Hi!

Okay, damit wird P zum Koordinatenursprung. Ich möchte nun aber z.B. eine Geschwindigkeit von 2 Pixel/Zyklus in Richtung Hypothenuse erreichen.

Gruß,
Marcus
MarcusK ist offline   Mit Zitat antworten
Alt 28-08-2003, 21:36   #5 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
Naja Variante 1 ist doch simpel genug

ActionScript:
  1. var speed = 2;
  2. var dx = targetX - currentX;
  3. var dy = targetY - currentY;
  4. var distance = Math.sqrt( ( dx * dx ) + ( dy * dy) );
  5.  
  6. var rotationToTarget = Math.atan2( dy, dx );
  7.  
  8. //update
  9. if( distance  > speed) {
  10.     var currentX += Math.cos( rotationToTarget ) * speed;
  11.     var currentY += Math.sin( rotationToTarget ) * speed;
  12. }

sollte es doch sein, vom Prinzip
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 28-08-2003, 21:46   #6 (permalink)
NordischByNature
 
Benutzerbild von MarcusK
 
Registriert seit: Sep 2002
Ort: Bremen
Beiträge: 125
Hi!

...hast eigentlich Recht. Irgendwie ist mir die Funktion atan2 wohl entgangen - hab' das selber mit den Polarkoordinaten hingebogen *krampf*

Danke an alle für die schnelle Hilfe / die Ideen! Habt mir sehr geholfen!

Gruß,
Marcus
MarcusK ist offline   Mit Zitat antworten
Alt 28-08-2003, 21:49   #7 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
ActionScript:
  1. if( distance  > speed) {
  2.         var currentX += Math.cos( rotationToTarget ) * speed;
  3.         var currentY += Math.sin( rotationToTarget ) * speed;
  4. } else {
  5.      var currentX += Math.cos( rotationToTarget ) * distance;
  6.         var currentY += Math.sin( rotationToTarget ) * distance;
  7. }

damit landest du dann auch "onPoint", hatte ich vergessen!
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 28-08-2003, 21:56   #8 (permalink)
NordischByNature
 
Benutzerbild von MarcusK
 
Registriert seit: Sep 2002
Ort: Bremen
Beiträge: 125
...genau, oder:

ActionScript:
  1. if( distance  > speed) {
  2.         var currentX += Math.cos( rotationToTarget ) * speed;
  3.         var currentY += Math.sin( rotationToTarget ) * speed;
  4. } else {
  5.         var currentX = targetX;
  6.         var currentY = targetY;
  7. }

danke nochmal!

Gruß,
Marcus
MarcusK ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 13:19 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele