vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

VB.NET - Fortgeschrittene
Re: Was paßt hier nicht? 
Autor: Hannes H.
Datum: 10.12.05 22:06

Hier der Code:

 Fenster.Punkt(0).Add(New PointF(449.8265, 138.4294))
        Fenster.Punkt(0).Add(New PointF(467.9634, 182.2364))
polygon.Innen(New PointF(347.6305, 192.3069), Fenster.Punkt(0))
    Public Function Innen(ByVal s1 As PointF, ByVal poly As ArrayList) As _
      Boolean
        Dim s2 As PointF = New PointF(s1.X + 1000, s1.Y)
        Dim z, Schnitt As Integer
 
        z = 0
        Dim vorbei As Boolean = False
        For Each p As PointF In poly
            vorbei = False
            Dim hlp, t, u As Integer
            'wenn letzter Punkt
 
            If z = poly.Count - 1 Then
                z += 1
                'Debug.WriteLine(z & "Ende:  " & s1.ToString & " über " & 
                ' s2.ToString & " == " & p.ToString & " nach " & poly( 
                ' 0).ToString)
 
                If s2.X - s1.X <> 0 Then
                    'Fall1
                    hlp = poly(0).Y - p.Y - (s2.Y - s1.Y) * (poly(0).X - p.X) / _
                      (s2.X - s1.X)
                    If hlp <> 0 Then
                        t = (s1.Y - p.Y + (s2.Y - s1.Y) * (p.X - s1.X) / (s2.X _
                          - s1.X)) / hlp
                        If t >= 0 And t <= 1 Then
                            u = t * (poly(0).X - p.X) / (s2.X - s1.X) + (p.X - _
                              s1.X) / (s2.X - s1.X)
                            If u >= 0 And u <= 1 Then
                                Schnitt += 1
                                Debug.WriteLine(z & "Ende: Fall1 " & _
                                  s1.ToString & " über " & s2.ToString & " == " _
                                  & p.ToString & " nach " & poly(0).ToString)
 
                                vorbei = True
                            End If
 
                        End If
                    End If
                ElseIf poly(0).X - p.X <> 0 And vorbei = False Then
                    'Fall2
                    t = (s1.X - p.X) / (poly(0).X - p.X)
                    If t >= 0 And t <= 1 Then
                        u = (p.Y - s1.Y + (poly(0).Y - p.Y) * (s1.X - p.X) / ( _
                          poly(0).X - p.X)) / (s2.Y - s1.Y)
                        If u >= 0 And u <= 1 Then
                            Schnitt += 1
                            Debug.WriteLine(z & "Ende: Fall2 " & s1.ToString & _
                              " über " & s2.ToString & " == " & p.ToString & "" & _
                              "nach " & poly(0).ToString)
 
                        End If
                    End If
                Else
                    'Fall3
                End If
 
                'wenn nicht letzer Punkt
            Else
                z += 1
                If s2.X - s1.X <> 0 Then
                    'Fall1
                    hlp = poly(z).y - p.Y - (s2.Y - s1.Y) * (poly(z).x - p.X) / _
                      (s2.X - s1.X)
                    If hlp <> 0 Then
                        t = (s1.Y - p.Y + (s2.Y - s1.Y) * (p.X - s1.X) / (s2.X _
                          - s1.X)) / hlp
                        If t >= 0 And t <= 1 Then
                            u = t * (poly(z).x - p.X) / (s2.X - s1.X) + (p.X - _
                              s1.X) / (s2.X - s1.X)
                            If u >= 0 And u <= 1 Then
                                Schnitt += 1
                                vorbei = True
                                Debug.WriteLine(z & ":Fall1  " & s1.ToString & _
                                  " über " & s2.ToString & " == " & p.ToString _
                                  & " nach " & poly(z).ToString)
 
                            End If
                        End If
                    End If
                ElseIf poly(z).x - p.X <> 0 And vorbei = False Then
                    'Fall2
                    t = (s1.X - p.X) / (poly(z).x - p.X)
                    If t >= 0 And t <= 1 Then
                        u = (p.Y - s1.Y + (poly(z).y - p.Y) * (s1.X - p.X) / ( _
                          poly(z).x - p.X)) / (s2.Y - s1.Y)
                        If u >= 0 And u <= 1 Then
                            Schnitt += 1
                            Debug.WriteLine(z & ":Fall2  " & s1.ToString & "" & _
                              "über " & s2.ToString & " == " & p.ToString & "" & _
                              "nach " & poly(z).ToString)
 
                        End If
                    End If
                Else
                    'Fall3
 
                End If
 
            End If
 
        Next
Hier wird immer Fall1 als True gesehen. WARUM?

Findet jemand den Fehler?

Danke
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Was paßt hier nicht?709Hannes H.10.12.05 22:06
Re: Was paßt hier nicht?498Hannes H.10.12.05 22:06
Hat sich erledigt522Hannes H.10.12.05 22:25

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-2025 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