Entfernung von 2 Dreidimensionalen Punkten

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Fice
Mitglied
Beiträge: 29
Registriert: 28.08.2003 15:21

Entfernung von 2 Dreidimensionalen Punkten

Beitrag 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.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
KB:knigge
Benutzeravatar
Fice
Mitglied
Beiträge: 29
Registriert: 28.08.2003 15:21

Beitrag 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)));
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
KB:knigge
Benutzeravatar
Fice
Mitglied
Beiträge: 29
Registriert: 28.08.2003 15:21

Beitrag von Fice »

aber ohne klammern kam nen ziemlich falsches ergebnis, paartausend pbwohl 252 rauskommen sollte. Mit Klammern stimmts wieder.

Naja, hauptsache es funzt
shwepsi
Mitglied
Beiträge: 1697
Registriert: 02.06.2003 14:37
Wohnort: NRW - immer dem Monitorleuchten folgen...
Kontaktdaten:

Beitrag 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
Die Weisheit verfolgte mich sekundenlang...
Aber sie überholte mich und war fortan nicht mehr gesehen !!!
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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);
KB:knigge
shwepsi
Mitglied
Beiträge: 1697
Registriert: 02.06.2003 14:37
Wohnort: NRW - immer dem Monitorleuchten folgen...
Kontaktdaten:

Beitrag 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
Die Weisheit verfolgte mich sekundenlang...
Aber sie überholte mich und war fortan nicht mehr gesehen !!!
Antworten

Zurück zu „Coding & Technik“