AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Kreuzungspunkt 2er Linien im 3D-Raum berechnen
Thema durchsuchen
Ansicht
Themen-Optionen

Kreuzungspunkt 2er Linien im 3D-Raum berechnen

Ein Thema von kalmi01 · begonnen am 1. Jul 2005 · letzter Beitrag vom 1. Jul 2005
Antwort Antwort
kalmi01
(Gast)

n/a Beiträge
 
#1

Kreuzungspunkt 2er Linien im 3D-Raum berechnen

  Alt 1. Jul 2005, 15:22
Hi,

wie kann man den Kreuzungspunkt 2er Linien im 3D-Raum berechnen ?
Gegeben sind Start- und Endpunkte beider Linien.
Die Linien kreuzen sich irgendwo, wenn man sie entsprechend verlängert.

Gesucht wird der Punkt, wo sich die Linien kreuzen (würden), bzw. wo sie sich am nächsten kommen.
Die Berechnung muss mit den Koordinaten auskommen und sollte so wenig trigonometrische Funktionen wie möglich verwenden.
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#2

Re: Kreuzungspunkt 2er Linien im 3D-Raum berechnen

  Alt 1. Jul 2005, 15:37
Erstmal machst du dir aus Start- und Endpunkt eine Geradengleichung:

g: x = (x0, y0, z0) + s(x1-x0, y1-y0, z1-z0)

Dann setzt du die Geraden gleich und löst das lineare Gleichungssystem auf.

Jetzt gibt es mehrere Fälle:
1) Die Geraden sind identisch
2) Die Geraden sind parallel
3) Die Geraden sind windschief
4) Die Geraden schneiden sich

In Fall 1) hast du unendlich viele Lösungen.
In Fall 2) hast du keine Lösung.
In Fall 3) hast du keine Lösung.
In Fall 4) hast du genau eine Lösung.

Du kannst leicht herausfinden ob die beiden Geraden parallel sind, indem du einfach deren Richtungsvektoren normierst und vergleichst. Sind sie identisch, so sind die Geraden parallel.

Wenn du zwei windschiefe Geraden hast, kannst du die beiden Punkte berechnen, die den kleinsten Abstand voneinander haben. Dazu betrachtest du zwei laufendene Punkte auf den Geraden.

Ein laufender Punkt auf der Geraden g wäre:
P(x0 + s(x1-x0) | y0 + s(y1-y0) | z0 + s(z1-z0))

Dann kannst du ja den Vektor zwischen den beiden laufenden Punkten betrachten. Das Skalarprodukt aus diesem Vektor mit dem Richtungsvektor einer Geraden muss 0 ergeben, dann steht der Vektor senkrecht zur Geraden. Damit kommst du schließlich auf die beiden Skalare s und r der Geradengleichungen, und somit auf die beiden Punkte auf den beiden Geraden, die den kleinsten Abstand zueinander haben.
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#3

Re: Kreuzungspunkt 2er Linien im 3D-Raum berechnen

  Alt 1. Jul 2005, 16:27
Ein Beispiel:

Gegeben sind zwei Geraden durch die Punkte (1|2|3) und (1|1|1) sowie (2|2|2) und (1|1|1).

Die Geradengleichungen sind also:
g: x = (1,2,3) + s(0,-1,-2)
h: x = (2,2,2) + t(-1,-1,-1)

Die Geraden setzt man gleich:
(1,2,3) + s(0,-1,-2) = (2,2,2) + t(-1,-1,-1)

Das ergibt ein lineares Gleichungssystem:
1 + 0s = 2 - t
2 - s = 2 - t
3 - 2s = 2 - t

nach s und t aufgelöst:
s = 1
t = 1

Es gibt eine Lösung, folglich schneiden sich die Geraden (wer hätte es gedacht...).
Um den Schnittpunkt zu bekommen, einfach s oder t in die Geradengleichung einsetzen:

(1,2,3) + 1*(0,-1-2)
= (1,1,1)
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#4

Re: Kreuzungspunkt 2er Linien im 3D-Raum berechnen

  Alt 1. Jul 2005, 16:34
Und schließlich noch die allgemeine Lösung dieses Gleichungssystems.

Gegeben sind zwei allgemeine Geradengleichungen:
g: x = (a,b,c) + s(d,e,f)
h: x = (g,h,i) + t(j,k,l)

Daraus ergibt sich ein lineares Gleichungssystem:
a + sd = g + tj
b + se = h + tk
c + sf = i + tl

Dies hat die Lösungen:
Code:
 a·k - b·j - g·k + h·j
——————————————————————— = s
      e·j - d·k
und
Code:
 a·e - b·d + d·h - e·g
——————————————————————— = t
       e·j - d·k
Somit haben die Geraden den allgemeinen Schnittpunkt:
Code:
|  a·e·j - d·(b·j + g·k - h·j)                    |
| —————————————————————————————                    | 
|           e·j - d·k                             |
|                                                  |
|  a·e·k - b·d·k + e·(h·j - g·k)                  | 
| ———————————————————————————————                  |
|            e·j - d·k                            |
|                                                  |
|  a·f·k - b·f·j + c·(e·j - d·k) + f·(h·j - g·k)  |
| ———————————————————————————————————————————————  |
|                    e·j - d·k                    |
(natürlich nur für den Fall, DASS sie sich schneiden...)
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#5

Re: Kreuzungspunkt 2er Linien im 3D-Raum berechnen

  Alt 1. Jul 2005, 19:00
Hi Oxmyx,

Danke, das reicht

Du hast mir sehr geholfen.
Was ich draus mache, werd ich hier posten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz