| |
Fortgeschrittene ProgrammierungSchittpunkt von 2 linien errechnen? | | | Autor: Prinzvalium | Datum: 20.12.06 17:38 |
| Hallo, ich habe folgendes Problem:
- In einem Koordinatensystem sind 4 Punkte gegeben. (P1 bis P4)
- Alle 4 Punkte haben unterschiedliche X und Y Koordinaten.
- Jeweils 2 Punkte ergeben eine Linie.
- Beide Linien scheiden sich irgendwo im Koordinatensystem.
Meine Frage ist nun: Wie errechne ich den Schnittpunkt der beiden Linien?
PS:
Den Winkel der beiden Linien habe ich schon ausrechenn können, das ist nicht weiter schwer, aber der Schnittpunkt bereitet mir echtes Kopfzerbrechen. | |
Re: Schittpunkt von 2 linien errechnen? | | | Autor: R@iner (Moderator) | Datum: 20.12.06 17:49 |
| Hi,
ich gehe davon aus, dass Du dies mit VB machenmöchtest und habe den Thread daher verschoben | |
Re: Schittpunkt von 2 linien errechnen? | | | Autor: VBMichi | Datum: 20.12.06 18:32 |
| Hi,
kann man davon ausgehen das die Linien 2 Gerade sind oder können das auch 2 Kurven sein?
Grüße | |
Re: Schittpunkt von 2 linien errechnen? | | | Autor: Heizer | Datum: 20.12.06 19:13 |
| Hallo Prinzvalium,
am Besten erledigt man das mit der analytischen Lösung. Den Schnittwinkel brauchst Du dafür nicht. Am Besten alle Variablen als Double deklarieren.
Ich habe die Formeln mal zusammengeschrieben:
P1: (X1, Y1), P2: (X2, Y2)
P3: (X3, Y3), P4: (X4, Y4)
Koeffizient a (der Übersicht halber habe ich den Bruch zerlegt):
Zähler = (X4-X1)*(Y4-Y3)-(X4-X3)*(Y4-Y1)
Nenner = (X2-X1)*(Y4-Y3)-(X4-X3)*(Y2-Y1)
a = Zähler / Nenner
Schnittpunktkoordinaten Ps (Xs, Ys):
Xs = X1 + a * (X2-X1)
Ys = Y1 + a * (Y2-Y1)
Probe erfolgt über Koeffizient b (brauchst Du i.d.R. nicht):
Zähler = (X2-X1)*(Y4-Y1)-(X4-X1)*(Y2-Y1)
Nenner = - (X2-X1)*(Y4-Y3)+(X4-X3)*(Y2-Y1)
b = Zähler / Nenner
Xs = X1 + b * (X4-X3)
Ys = Y1 + b * (Y4-Y3)
Gruß Heizer
Glück auf BO | |
Re: Schittpunkt von 2 linien errechnen? | | | Autor: Dirk | Datum: 21.12.06 08:46 |
| Hier mein Code:
Du müsstest noch die Klassen cLine2d und cLocation2d ersetzen.
' 1: orientation is counterclockwise or
' points are collinear and
' rP1 between rP0 and rP2 P0--P1--P2
' -1: orientation is clockwise or
' points are collinear and
' rP0 between rP1 and rP2 P1--P0--P2
' 0: points are collinear and
' rP2 is between rP1 and rP2 P1--P2--P0
Public Enum tCCW
CCW_CCW_OR_P1_BETWEEN = 1
CCW_CW_OR_P0_BETWEEN = -1
CCW_P2_BETWEEN = 0
End Enum
Public Function Intersect(ByRef rLine0 As cLine2d, _
ByRef rLine1 As cLine2d) As Boolean
Intersect = (CCW(rLine0.P1, rLine0.P2, rLine1.P1) * _
CCW(rLine0.P1, rLine0.P2, rLine1.P2)) <= 0 And _
(CCW(rLine1.P1, rLine1.P2, rLine0.P1) * _
CCW(rLine1.P1, rLine1.P2, rLine0.P2)) <= 0
End Function
'***Public**********************************************************************
'
' Procedure: Function CCW
' Parameters: rP0, rP1, rP2 all cLocation2d
' Return: tCCW
'
' 1: orientation is counterclockwise or
' rP1 between rP0 and rP2 P0--P1--P2
' -1: orientation is clockwise
' rP0 between rP1 and rP2 P1--P0--P2
' 0: poins are collinear
' rP2 is between rP1 and rP2 P1--P2--P0
'
'Description: CCW (CounterClockWise) returns orientation of the 3 points on a
' plane. In case that all points are collinear (on a straight line)
' see return description.
'
'*******************************************************************************
Public Function CCW(ByRef rP0 As cLocation2d, _
ByRef rP1 As cLocation2d, _
ByRef rP2 As cLocation2d) As tCCW
On Error Resume Next
Dim dx1 As Long, dx2 As Long, dy1 As Long, dy2 As Long
dx1 = rP1.X - rP0.X
dy1 = rP1.Y - rP0.Y
dx2 = rP2.X - rP0.X
dy2 = rP2.Y - rP0.Y
If (dx1 * dy2 > dy1 * dx2) Then
CCW = CCW_CCW_OR_P1_BETWEEN
ElseIf (dx1 * dy2 < dy1 * dx2) Then
CCW = CCW_CW_OR_P0_BETWEEN
ElseIf ((dx1 * dx2) < 0) Or ((dy1 * dy2) < 0) Then
CCW = CCW_CW_OR_P0_BETWEEN
ElseIf ((dx1 * dx1 + dy1 * dy1) < (dx2 * dx2 + dy2 * dy2)) Then
CCW = CCW_CCW_OR_P1_BETWEEN
Else
CCW = CCW_P2_BETWEEN
End If
End Function Gruß
Dirk
--
?Get it right the first time | |
Re: Schittpunkt von 2 linien errechnen? | | | Autor: Prinzvalium | Datum: 26.12.06 13:28 |
| Servus und Hallo
recht herzlichen Dank für die Formel. Funktioniert spitzenmäßig.
Noch einen schönen 2. Feiertag und guten Rutsch ins neue Jahr. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|