Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Kreuzungspunkt 2er Linien im 3D-Raum berechnen (https://www.delphipraxis.net/48870-kreuzungspunkt-2er-linien-im-3d-raum-berechnen.html)

kalmi01 1. Jul 2005 14:22


Kreuzungspunkt 2er Linien im 3D-Raum berechnen
 
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.

Oxmyx 1. Jul 2005 14:37

Re: Kreuzungspunkt 2er Linien im 3D-Raum berechnen
 
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.

Oxmyx 1. Jul 2005 15:27

Re: Kreuzungspunkt 2er Linien im 3D-Raum berechnen
 
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)

Oxmyx 1. Jul 2005 15:34

Re: Kreuzungspunkt 2er Linien im 3D-Raum berechnen
 
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...)

kalmi01 1. Jul 2005 18:00

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

Danke, das reicht :o :bounce2: :dancer: :spin2: :hi:

Du hast mir sehr geholfen.
Was ich draus mache, werd ich hier posten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz