Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-03-2009, 10:56   #1 (permalink)
Flash-Einsteiger
 
Benutzerbild von Meder
 
Registriert seit: Jun 2008
Ort: Nähe Frankfurt/M
Beiträge: 127
Koordinatenberechung

Hallo,

ich versuche mich gerade an einer eigentlich einfachen Berechnung.

Gegeben ist ein zufällig positionierter Punkt 1 mit x1 und y1 sowie ein zufällig positionierter Punkt 2 mit x2, y2.
Punkt 1 soll sich bis auf eine bestimmte Entfernung E geradlinig zum Punkt 2 zu bewegen.

Gesucht ist nun die Koorinate x3, y3 zwischen Punkt 1 und 2 mit Abstand E zu Punkt 2.

Bzw. die Formil, mit der mit so eine Koordinate berechnet.
Meder ist offline   Mit Zitat antworten
Alt 16-03-2009, 11:41   #2 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 548
Schau mal in die Point-Klasse, speziell distance und interpolate:

ActionScript:
  1. var p1=new Point(50,30);
  2. var p2=new Point(100,40);
  3. var sollEntfernung=25;
  4.  
  5. var istEntfernung=Point.distance(p1,p2);
  6. var p3=Point.interpolate(p1,p2,1-(sollEntfernung/istEntfernung));
  7.  
  8. //test
  9. trace(Point.distance(p1,p3));

Geändert von joeydee (16-03-2009 um 11:43 Uhr)
joeydee ist offline   Mit Zitat antworten
Alt 16-03-2009, 12:10   #3 (permalink)
Flash-Einsteiger
 
Benutzerbild von Meder
 
Registriert seit: Jun 2008
Ort: Nähe Frankfurt/M
Beiträge: 127
Oh, n dickes Danke.

Ich hab in der Zwischenzeit zwei Blätter voll geschrieben und versucht ne Gleichung dafür zu schreiben...
Meder ist offline   Mit Zitat antworten
Alt 22-03-2009, 17:37   #4 (permalink)
Spieler
 
Registriert seit: Feb 2003
Ort: Hamburg/Elmshorn
Beiträge: 297
nur für den Fall, das jemand die Point-Klasse nicht nutzen kann/will (z.B. AS2) hier die generelle mathematisch Lösung:

da du 2 Punkte hast, kannst du ein rechtwinkliges Dreieck erkennen. Das erstmal auf den Nullpunkt bringen und man erhält:

Ankathete=x2-x1
Gegenkathete=y2-y1


Mit trigonometrischen Mitteln kannst du nun den Winkel beta (der an p1) errechnen:

tan(beta)=Gegenkathete/Ankathete
beta=arctan(Gegenkathete/Ankathete)

Mit dem Winkel und der Entfernung E, die gleichbedeutend ist mit der Hypotenuse für das Dreieck von p1 und p3 ist, lassen sich nun die "neuen" Gegen- und Ankatheten berechnen:

Gegenkathete=Hypotenuse*sin(beta)
und
Ankathete=Hypotenuse*cos(beta)

Nun nur noch zurück "translatieren" :-) und du erhälst p3:

x3=x1+Ankathete
y3=y1+Gegenkathete


Das ist schon alles :-) Mathematisch gesehen. Ich hoffe, ich hab bei den Winkelfunktionen keinen Fehler drin, aber eigentlich sollten das die richtigen trig. Funktionen sein...

Man sollte jedoch im Hinterkopf haben, dass die Funktionen der Math-Klasse nicht grade für ihre Schnelligkeit bekannt sind!
Angehängte Grafiken
Dateityp: gif trig.gif (6,6 KB, 25x aufgerufen)
__________________
MfG,
FastEddie

Kunde: „Alles prima, wir hätten da aber noch eine Textkorrektur in den Groblayouts. Bitte Lorem ipsum anstatt Lorem Ipsum.“ Geliehen von http://kunden.ausderhoelle.de

Geändert von FastEddie (22-03-2009 um 18:28 Uhr) Grund: Schaubild angrfügt
FastEddie ist offline   Mit Zitat antworten
Alt 22-03-2009, 22:05   #5 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Der Vollständigkeit halber noch eine Mathematische Lösung ohne Trigonometrische Funktionen:

Vector von Zielpunkt p2 zu Startpunkt p1:
v: (p1.x - p2.x, p1.y - p2.y)

Seine Länge ergibt sich nach Pythagoras:
len_v = Math.sqrt(v.x * v.x + v.y * v.y)

Diesen Vektor auf die Länge 1 normalisieren:
u = (v.x / len_v, v.y / len_v)

Und auf die gewünschte Entfernung skalieren:
d = (u.x * distance, u.y * distance)

Damit ergibt sich der Endpunkt zu
p3 = (p2.x + d.x, p2.y + d.y)
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 23-03-2009, 21:30   #6 (permalink)
Spieler
 
Registriert seit: Feb 2003
Ort: Hamburg/Elmshorn
Beiträge: 297
Oha, ja, das ist gut! Vektoren hab ich gar nicht im Kopf gehabt. Er rumorte zwar im Hinterkopf, dass das auch irgendwie anders gehen müsste, aber der Funke ist nicht übergesprungen...

Dafür hab ich nen schönes Schaubild
__________________
MfG,
FastEddie

Kunde: „Alles prima, wir hätten da aber noch eine Textkorrektur in den Groblayouts. Bitte Lorem ipsum anstatt Lorem Ipsum.“ Geliehen von http://kunden.ausderhoelle.de
FastEddie 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 18:20 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele