Seite 1 von 1
Entfernung von 2 Dreidimensionalen Punkten
Verfasst: 09.04.2005 16:24
von Fice
Entfernung von 2 dreidimensionalen Punkten errechnen
Hallo, ich bin derzeit dabei nen Browsergame zu programmieren und dazu muss ich die Entfernung von 2 Planeten im 3Dimensionalen raum errechnen, dazu hab ich mal folgende Funktion geschrieben, bin mir aber net sicher ob die Rechnungen stimmen.
Code: Alles auswählen
function entfernung($x1,$y1,$z1,$x2,$y2,$z2)
{
$x = abs($x2-$x1);
$y = abs($y2-$y1);
$z = abs($z2-$z1);
$b = ($x*$x) + ($y*$y);
$b = bcsqrt($b);
$entfernung = ($b*$b) + ($z*$z)
return bcsqrt($entfernung);
}
Ist eigentlich eher nen mathematisches Problem, aber ich hoffe ihr könnt mir trotzdem weiterhelfen.
Verfasst: 09.04.2005 16:52
von Pyramide
Bin zwar kein Mathe-Experte, aber nach meinem Wissenstand sollte das richtig sein. Geht sogar noch kürzer - da du ja von $b zuerst die Wurzel ziehst und dann wieder $b*$b rechnest, kannst du auch gleich sqrt(($x*$x) + ($y*$y) + ($z*$z)) schreiben.
Verfasst: 09.04.2005 18:17
von Fice
ahhh, stimmt ja. Danke für den Tipp, werds gleich mal umändern.
EDIT: mann muss noch klammern setzen, sonst kommen falsche ergebnisse raus, so ist's richtig:
round(bcsqrt( (($x*$x) + ($y*$y)) + ($z*$z)));
Verfasst: 09.04.2005 21:28
von Pyramide
Fice hat geschrieben:EDIT: mann muss noch klammern setzen, sonst kommen falsche ergebnisse raus, so ist's richtig:
round(bcsqrt( (($x*$x) + ($y*$y)) + ($z*$z)));
Das kann aber nicht an den Klammern liegen, sondern nur an bcsqrt() vs. sqrt() oder dem zusätzlichen round() Aufruf. Eigentlich würde auch
sqrt($x*$x + $y*$y + $z*$z) reichen (Punkt- vor Strichrechnung), die Klammern dienen da nur der leichteren Lesbarkeit. Und ob man nun
a+b+c oder
(a+b)+c schreibt ist auch egal.
Verfasst: 10.04.2005 17:46
von Fice
aber ohne klammern kam nen ziemlich falsches ergebnis, paartausend pbwohl 252 rauskommen sollte. Mit Klammern stimmts wieder.
Naja, hauptsache es funzt
Verfasst: 10.04.2005 21:53
von shwepsi
falsch: sqrt($x*$x + $y*$y + $z*$z)
warum? ($z * $z) wird nicht durch die Wurzel gezogen, siehe
$b = ($x*$x) + ($y*$y);
$b = bcsqrt($b);
entfernung = ($b*$b) + ($z*$z)
ansonsten stimmte das aber
war halt nur ein kleiner Klammer Fehler
Verfasst: 10.04.2005 21:57
von Pyramide
shwepsi hat geschrieben:($z * $z) wird nicht durch die Wurzel gezogen, siehe
$b = ($x*$x) + ($y*$y);
$b = bcsqrt($b);
entfernung = ($b*$b) + ($z*$z)
Und siehe dann
return bcsqrt($entfernung);
Verfasst: 10.04.2005 22:00
von shwepsi
Pyramide hat geschrieben:shwepsi hat geschrieben:($z * $z) wird nicht durch die Wurzel gezogen, siehe
$b = ($x*$x) + ($y*$y);
$b = bcsqrt($b);
entfernung = ($b*$b) + ($z*$z)
Und siehe dann
return bcsqrt($entfernung);
u_u
erwischt
ich gebe nach, obwohl du da der klügere bist...
nein ich bestehe auf meine Antwort, sonst ist dsa ja paradox XD