Hallo!
Hat jemand eine Funktion, die den Abstand zweier 3D-Geraden zurückgibt? :)
Gruß
Zudo
Abstand zweier 3D-Geraden
-
- Establishment
- Beiträge: 191
- Registriert: 01.03.2009, 19:22
- Echter Name: David N.
Re: Abstand zweier 3D-Geraden
Hallo,
in welcher Form hast du denn die Geraden gegeben?
Spontan würde ich einfach das Kreuzprodukt der beiden Richtungsvektoren nehmen, normalisieren, und dann den Vektor zwischen den beiden gegebenen Punkten darauf projizieren (Skalarprodukt). Wenn ich mich nicht irre, solltest du dann die Länge des Lots zwischen den beiden Geraden erhalten. Getestet habe ich das allerdings nicht...
in welcher Form hast du denn die Geraden gegeben?
Spontan würde ich einfach das Kreuzprodukt der beiden Richtungsvektoren nehmen, normalisieren, und dann den Vektor zwischen den beiden gegebenen Punkten darauf projizieren (Skalarprodukt). Wenn ich mich nicht irre, solltest du dann die Länge des Lots zwischen den beiden Geraden erhalten. Getestet habe ich das allerdings nicht...
Re: Abstand zweier 3D-Geraden
Die Geraden werden durch Punkt und Richtungsvektor beschrieben.
Habe gehofft, dass jemand so eine Funktion zufällig in seiner Matheunit oder so hat und die posten würde. Es wird ja immer gesagt, man soll das Rad nicht neu erfinden.
Habe gehofft, dass jemand so eine Funktion zufällig in seiner Matheunit oder so hat und die posten würde. Es wird ja immer gesagt, man soll das Rad nicht neu erfinden.
Re: Abstand zweier 3D-Geraden
Googol
Nr. 7
Nr. 7
Code: Alles auswählen
<script language="JavaScript">
function berechne_abstand(f) {
f.ergebnis.value=""
kollinear = false
loesbar = true
// Koordinaten der Einstiegspunkte einlesen
gx = f.gx.value
gy = f.gy.value
gz = f.gz.value
hx = f.hx.value
hy = f.hy.value
hz = f.hz.value
// Koordinaten der Richtungsvektoren einlesen
rx = f.rx.value
ry = f.ry.value
rz = f.rz.value
if (rx == 0 && ry == 0 && rz == 0) {
alert("Fehler - erster Richtungsvektor = Nullvektor !")
loesbar = false
}
sx = f.sx.value
sy = f.sy.value
sz = f.sz.value
if (sx == 0 && sy == 0 && sz == 0) {
alert("Fehler - zweiter Richtungsvektor = Nullvektor !")
loesbar = false
}
if (loesbar == true) {
// prüfen, ob die Richtungsvektoren kollinear sind
if (sx != 0) {
faktor = rx/sx }
else {
if (sy != 0) {faktor = ry/sy }
else { faktor = rz/sz }
}
if (sx*faktor == rx && sy*faktor == ry && sz*faktor == rz) {
kollinear = true
}
if (kollinear == false) {
// Kreuzprodukt k der Richtungsvektoren berechnen
kx = ry*sz-rz*sy
ky = rz*sx-rx*sz
kz = rx*sy-ry*sx
// Norm des Kreuzprodukts n_k berechnen
n_k = Math.sqrt(kx*kx+ky*ky+kz*kz)
// Differenzvektor d der Einstiegspunkte berechnen
dx = gx-hx
dy = gy-hy
dz = gz-hz
// Abstand der Geraden = Differenzvektor auf Kreuzprodukt projizieren
abstand = Math.abs(dx*kx+dy*ky+dz*kz)/n_k
if (abstand != 0) {
// Geraden windschief
abstand = "Abstand der windschiefen Geraden: "+abstand
}
else {
// Schnittpunkt vorhanden
m = (gx*ry-gy*rx+rx*hy-hx*ry)/(sx*ry-sy*rx)
spx = hx*1+m*sx
spy = hy*1+m*sy
spz = hz*1+m*sz
abstand = "Die Geraden schneiden sich im Punkt S("+spx+"/"+spy+"/"+spz+") (Abstand daher Null) !"
}
}
else {
// parallele Geraden, Abstand eines Einstiegspunkts von der
// anderen Gerade berechnen
dx = gx - hx
dy = gy - hy
dz = gz - hz
// Kreuzprodukt aus Differenzvektor d und Richtungsvektor s bilden
kx = dy*sz-dz*sy
ky = dz*sx-dx*sz
kz = dx*sy-dy*sx
// Norm des Kreuzprodukts und des Richtungsvektors
n_k = Math.sqrt(kx*kx+ky*ky+kz*kz)
n_s = Math.sqrt(sx*sx+sy*sy+sz*sz)
// Quotient ergibt Abstand
abstand = n_k / n_s
if (abstand != 0) {
abstand = "Abstand der parallelen Geraden: "+abstand
}
else {
abstand = "Die beiden Geraden sind identisch !"
}
}
f.ergebnis.value = abstand
}
}
</script>
-
- Establishment
- Beiträge: 470
- Registriert: 01.03.2009, 19:09
Re: Abstand zweier 3D-Geraden
Naja ich zwar nicht aber andere schlaue Leute :)
http://www.geometrictools.com/LibFounda ... tance.html
musst ziemlich weit runterscrollen
übrigens ein sehr guter anlaufpunkt für solche sachen falls dir noch nicht bekannt :)
http://www.geometrictools.com/LibFounda ... tance.html
musst ziemlich weit runterscrollen
übrigens ein sehr guter anlaufpunkt für solche sachen falls dir noch nicht bekannt :)
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
-
- Establishment
- Beiträge: 191
- Registriert: 01.03.2009, 19:22
- Echter Name: David N.
Re: Abstand zweier 3D-Geraden
Inzwischen wurden ohnehin schon fertige Lösungen gepostet, aber ein kleiner Nachtrag: Mein Vorschlag funktioniert natürlich nur, wenn die Geraden nicht (anti-/)parallel sind. In diesem Fall würde für das Kreuzprodukt der Richtungsvektoren der Nullvektor hinauskommen, dann kannst du das Problem aber auf Punkt-Gerade reduzieren.
Re: Abstand zweier 3D-Geraden
Dank euch allen!! :D