Richtungsproblem

kaetzacoatl

Bekanntes Mitglied
Hallo,
ich versuche schon länger ein problem zu lösen:
ich habe zwei ObjeKte in einem zwei-Dimensionalem
Spiel (Slick/LWJGL). Diese Objekte haben eine x und eine
y Koordinate und eine Methode move(int,int), die die
Koordinaten verändert.
Mein Problem ist jetzt, dass ich die beiden Objekte
aufeinander zu bewegen will.
Gib es irgend eine Formel, mit der ich berechnen kann,
wie sich die Objekte bewegen?
Oder hab ihr irgend welche Ideen wie man sowas mach?
Schonmal Danke
 
Zuletzt bearbeitet:

bERt0r

Top Contributor
Die kürzeste Verbindung zwischen zwei Punkten ist eine Linie... Das heißt du kannst dir aus zwei Punkten einen Vektor ausrechnen und z.B ein zehntel von dem Vektor zu einem Punkt rechnen.
 
T

Trolllllll

Gast
Speicher letzte Position und nehme die aktuelle Position, die Differenz ist die Bewegung.
 
T

TryToHelp

Gast
Ich weiß halt nicht wie ich mich auf dieser Linie bewegen soll.
...

Aber wie du eine Grade aus 2 Punkten berechnen kannst, weißt du?
So eine Grade hat eine Steigung (wenn man sich die formel mx+b anschaut, ist das das m)
Nun muss man die Punkte nur noch in richtung dieser Steigung verschieben.
Bei z.B. einer Steigung von 1 (m=1) muss man x und y jeweils um eins erhöhen, bzw bei dem anderen Objekt um eins senken.
bei einer steigung von 2 (m=2) muss man bei einer verschiebung von 1 x den y Wert um 2 erhöhen.
 

BRoll

Bekanntes Mitglied
..und wenn du das immer noch nicht verstanden hast,
hier die geschrieben Variante dazu:

Java:
public double[] getMovement(double x1, double y1, double x2, double y2)
	{				
		double w=Math.atan2((y2-y1),(x2-x1));	
		double speed[]=new double[2];
		speed[0]=Math.cos(w);
		speed[1]=Math.sin(w);		
		return speed;
	}

So kann man es über den Steigungswinkel ausrechnen,
und dann auf Polar (Koordinaten) zurückrechnen.
Man erhält so die X und Y Richtung der Bewegung,
für verschiedene Geschwindigkeiten muss man diese
Werte einfach noch mal die Geschwindigkeit rechnen.

Ich denke mal das ist nicht so schwierig zu verstehen ;)



Ich hoffe ich hab hier niemand die Arbeit damit weggenommen :D

mfg BRoll
 

Ark

Top Contributor
@BRoll: Deine Lösung kommt mir spontan etwas umständlich vor. Hier mal eine hoffentlich einfachere Version (die hoffentlich auf die gleichen Ergebnisse kommt, ein erster Test sah jedenfalls vielversprechend aus):
Java:
public static double[] getMovement(final double x1, final double y1, final double x2, final double y2){
	final double a = x2 - x1;
	final double b = y2 - y1;
	final double h = Math.hypot(a, b);
	return new double[]{a / h, b / h};
}
Okay, ich halte fest: Meine Methode unterscheidet sich in zwei wesentlichen Punkten von der vorangegangenen Implementierung: Sie ist in bestimmten Fällen deutlich genauer ([0.0, -1.0] statt [6.123233995736766E-17, -1.0]) und in Grenzfällen sogar aussagekräftiger bzw. weniger irreführend ([NaN, NaN] statt [1.0, 0.0] bei Radius 0).

Ark
 
Zuletzt bearbeitet:

Neue Themen


Oben