vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 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

Visual-Basic Einsteiger
Punkt an Punkt mit kleinsten Abstand setzen.. 
Autor: 0Code
Datum: 18.02.08 01:50

Hallo.
Ich komme seit vielen Stunden nicht klar. Da gibts doch bestimmt ein besseres Mathegehirn als mich. Mir reißen irgendwann in der Rechnung die Gedanken ab. Dafür bin ich wohl ganz einfach zu dumm...
Hoffe hier wird mir geholfen.

Ich habe mehrere Linien gezeichnet und die koordinaten Start und EndPunkte sind in 2 zueinander paralelen arrays gespeichert. Wenn ich jetzt eine neue Linie zeichne, dann soll die linie an dem Punkt einer Linie beginnen die am nächsten ist.

Hier mal der Code den ich geschrieben habe, der funktioniert auch zum teil, aber nicht immer....

  Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As _
    System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
      'Variablen weggelassen weil Posting zu lang
 
        'Erfasst StartPunkt für eine neue Linie
 
        PunktStart.X = e.X
        PunktStart.Y = e.Y
 
        'Alle vorhanden Linien an der X Koordinate messen
        If Linien.GetAnzahlLinie > 0 Then
            For forAmNächsten = 0 To Linien.GetAnzahlLinie - 1
                AbstandX = Math.Abs(PunktStart.X - Linien.StartPunkt( _
                  forAmNächsten).X)
                If AbstandX < KleinsterAbstandX Then
                    'Kleinsten ABstand speichern
                    KleinsterAbstandX = AbstandX
                    PunktMitKleinstenAbstX = forAmNächsten
                End If
            Next
        End If
 
        'Alle vorhanden Linien an der X Koordinate messen -- gleiches für 
        ' Endpunkte
        If Linien.GetAnzahlLinie > 0 Then
            For forAmNächsten = 0 To Linien.GetAnzahlLinie - 1
                AbstandXep = Math.Abs(PunktStart.X - Linien.EndPunkt( _
                  forAmNächsten).X)
                If AbstandXep < KleinsterAbstandXep Then
                    'Kleinsten ABstand speichern
                    KleinsterAbstandXep = AbstandXep
                    PunktMitKleinstenAbstXep = forAmNächsten
                End If
            Next
        End If
 
        'Alle verhandenLinien an der YKoordinate messen
        If Linien.GetAnzahlLinie > 0 Then
            For forAmNächsten = 0 To Linien.GetAnzahlLinie - 1
                AbstandY = Math.Abs(PunktStart.Y - Linien.StartPunkt( _
                  forAmNächsten).Y)
                If AbstandY < KleinsterAbstandY Then
                    'kleinsten ABstand speichern
                    KleinsterAbstandY = AbstandY
                    PunktMitKleinstenAbstY = forAmNächsten
                End If
            Next
        End If
 
 
        'Alle verhandenLinien an der YKoordinate messen ---gleiches für alle 
        ' Endpunkte
        If Linien.GetAnzahlLinie > 0 Then
            For forAmNächsten = 0 To Linien.GetAnzahlLinie - 1
                AbstandYep = Math.Abs(PunktStart.Y - Linien.EndPunkt( _
                  forAmNächsten).Y)
                If AbstandYep < KleinsterAbstandYep Then
                    'kleinsten ABstand speichern
                    KleinsterAbstandYep = AbstandYep
                    PunktMitKleinstenAbstYep = forAmNächsten
                End If
            Next
        End If
 
 
 
        If Linien.GetAnzahlLinie > 0 Then
            If KleinsterAbstandX <= KleinsterAbstandXep Then
                If KleinsterAbstandX <= KleinsterAbstandYep Then
                    If KleinsterAbstandX <= KleinsterAbstandY Then
                        PunktStart = Linien.StartPunkt(PunktMitKleinstenAbstX)
                    End If
                End If
 
            ElseIf KleinsterAbstandXep <= KleinsterAbstandX Then
                If KleinsterAbstandXep <= KleinsterAbstandY Then
                    If KleinsterAbstandXep <= KleinsterAbstandYep Then
                        PunktStart = Linien.EndPunkt(PunktMitKleinstenAbstXep)
 
                    End If
                End If
            ElseIf KleinsterAbstandY <= KleinsterAbstandYep Then
                If KleinsterAbstandY <= KleinsterAbstandX Then
                    If KleinsterAbstandY <= KleinsterAbstandXep Then
                        PunktStart = Linien.StartPunkt(PunktMitKleinstenAbstY)
 
                    End If
                End If
            ElseIf KleinsterAbstandYep <= KleinsterAbstandY Then
                If KleinsterAbstandYep <= KleinsterAbstandX Then
                    If KleinsterAbstandYep <= KleinsterAbstandXep Then
                        PunktStart = Linien.EndPunkt(PunktMitKleinstenAbstYep)
                    End If
                End If
            End If
 
        End If
        'Bereitsvorhandene Linien zeichnen
.....'Posting zu lang muss den rest weglassen
    End Sub
Linien ist eine simple klasse----'musste ich weglassen Posting zu lang...

Es wäre sehr schön, wenn mir da jemand ne besserung geben kann...
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Punkt an Punkt mit kleinsten Abstand setzen..9430Code18.02.08 01:50
Eigentlich ERLEDIGT.5020Code18.02.08 03:44
Vollständigkeitshalber. ERLEDIGT.4680Code18.02.08 04:51
ich führe hier zwar ein selbstgespräch...4650Code18.02.08 20:36
Re: ich führe hier zwar ein selbstgespräch...436Jan536628.02.08 13:03

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