Berechnung einer Entfernung mittels Koordinaten

Gali

Mitglied
Hi,

ich versuche nun schon seit ein paar Stunden eine Lösung für mein Problem zu finden. Und zwar programmiere ich derzeit ein Browsergame, nun muss ich die Entfernung zweier Koordinaten berechnen. Durch :google: bin ich dann auf eure seite gekommen. Das Koordinatensystem ist wie folgt aufgebaut:

4 Ozeane (2x2)

in jedem Ozean sind 100 Inselgruppen (10x10)

und in jeder Inselgruppe sind 16 Inselpunkte (4x4)

Nun möchte ich die Entfernung von z.B.1:1:1 (Ozean:Inselgruppe:Inselpunkt) zu 2:1:1 berechnen. Ein weiters Problem besteht darin, das ich die Ozeanebreite auch mal verändern sollte, heißt in 9 Ozeane (3x3 - es ist immer quadratisch)

Hätte da vlt. jemand einen Ansatz oder gar eine Lösung für mich, bitte? :)

mfg Gali
 
Hallo,

das kommt ganz darauf an, wie die Ozeane und die Inselgruppen zueinander angeordnet sind. Wenn du die Koordinaten irgendwie in karthesische Koordinaten umwandeln kannst, dann entspricht die Entfernung sqrt((x_1-x_2)² + (y_1-y_2)²).

Grüße,
Matthias
 
Nein, mein Problem ist, das ganze in eben so ein Koordinatensystem zu bekommen.
Hm, war meine Erklärung nicht genug?

Der Ozean sieht so aus: (2x2)
01|02
03|04

Und die Inselgruppen in dem Ozean eben so (10x10)

01|02|03|04|05|06|07|08|09|10
11|12|13|14|15|16|16............
.........................................
91|92|93|94|95|96|97|98|99|100

Und die Inselpunkte in der Inselgruppe (4x4)

01|02|03|04
05|06|07|08
09|10|11|12
13|14|15|16

Ich hoffe das war deine Frage :)

mfg Gali
 
PHP:
function berechne_koordinaten($k1, $k2, $k3){
	$x = (($k1-1)%2)*40 + (($k2-1)%10)*4 + ($k3-1)%4;
	$y = floor(($k1-1)/2)*40 + floor(($k2-1)/10)*4 + floor($k3/4);
	return array($x, $y);
}

Probiers mal damit zum errechnen der Koordinaten.
Berechnet werden X- und Y-Wert der linken oberen Ecke des jeweiligen Inselpunkts und als Array zurückgegeben.
Die Entfernung von 2 Punkten errechnest du mit Pythagoras so wie von Matthias beschrieben.

P.S.: Funktion ist nicht getestet, müsste aber so stimmen.
 
Danke aruba, stimmt aber leider nicht ganz. Er zeigt mir es so als gäbe es nur 9 Inselpunkte (3x3) keine 16 (4x4). Ich wüsst aber auch nicht wo ich das jetzt besser machen könnte :(

/edit

Ich hab es mir nochmal genauer angeschaut:
1:1:1 zu 1:1:2 ist 0,0 - 1,0
1:1:1 zu 1:1:3 ist 0,0 - 2,0
1:1:1 zu 1:1:4 sollten 0,0 - 3,0 er zeigt jedoh 0,0 - 3,1
 
Zuletzt bearbeitet:
Ja, du hast Recht.

So müsste es jetzt stimmen:

PHP:
function berechne_koordinaten($k1, $k2, $k3){
	$x = (($k1-1)%2)*40 + (($k2-1)%10)*4 + ($k3-1)%4;
	$y = floor(($k1-1)/2)*40 + floor(($k2-1)/10)*4 + floor(($k3-1)/4);
	return array($x, $y);
}
 
Heißen Dank, es funktioniert :)
Könntest du mir bitte noch den Gefallen tun und sagen, welche Variabeln ich ändern muss, wenn ich die mehr Ozeane haben möchte? :) (sind aber immer quadratisch)

mfg Gali
 
PHP:
$a = array( "inselpunkte_breite" => 4,
			"inselpunkte_hoehe" => 4,
			"inselgruppen_breite" => 10,
			"inselgruppen_hoehe" => 10,
			"ozeane_breite" => 2,
			"ozeane_hoehe" => 2
		);

function berechne_koordinaten($k1, $k2, $k3){
	global $a;
	$x = (($k1-1)%$a['ozeane_breite'])*$a['inselgruppen_breite']*$a['inselpunkte_breite'] + (($k2-1)%$a['inselgruppen_breite'])*$a['inselpunkte_breite'] + ($k3-1)%$a['inselpunkte_breite'];
	$y = floor(($k1-1)/$a['ozeane_breite'])*$a['inselgruppen_hoehe']*$a['inselpunkte_hoehe'] + floor(($k2-1)/$a['inselgruppen_breite'])*$a['inselpunkte_hoehe'] + floor(($k3-1)/$a['inselpunkte_breite']);
	return array($x, $y);
}

Okay, ich habe die Werte durch Variablen ersetzt, die kannst du einfach anpassen.
Es sollte auch funktionieren, wenn die Flächen nicht quadratisch sind.
 
Ich versteh noch nicht wie das funktioniert.

Muss die function 2x eingebaut werden? weil man
hat doch 2x Koordinaten (z.b. 1:1:1 zu 1:1:2) ..

$k1 = 1;
$k2 = 1;
$k3 = 1;

richtig? Jetzt müsste man das gleiche ja nochmal für
die 1:1:2 machen oder nicht? und dann hat man 2 Xwerte
und 2Ywerte .. dann die pythagoras rechnung und es müsste
hinhaun, tuts bei mir aber nicht wieso? denkfehler?
 
Zurück