vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Schittpunkt 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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schittpunkt von 2 linien errechnen? 
Autor: ModeratorR@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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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