Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
23/03/09 19:26
Federico1976
Ciao a Tutti Sono un programmatore amatoriale Sto provando a fare un pragrammino di grafica in vb.net Mi servirebbe fare un ciclo di una linea punto per punto per controllare se due linee si intesecano non so come fare e magari mi spiego anche un po male
chi mi puo aiutare
Vi ringrazio anticipatamente :hail:
aaa
23/03/09 19:29
fabriziorocca
chiedi a Totem , lui è un esperto di VB.NET !!!
aaa
23/03/09 19:37
Federico1976
Ti ringrazio della risposta ma come posso chiedere?
aaa
23/03/09 20:25
fabriziorocca
clicca qui per mandarli un messaggio, anche di carattere tecnico : pierotofy.it/pages/login/cpanel/mail/…
aaa
24/03/09 8:11
ruggy94
si però scusate...sarebbe giusto rispondere sul forum e non privatamente. Poi vi assicuro che non c'è bisogno di inviare un messaggio a Totem...appena si logga risponde di sicuro. Comunque ora faccio delle prove di codice e riposto.
aaa
24/03/09 9:17
Federico1976
Ciao ti ringrazio ai ragione anche perche no si riesce a trovare nulla di simile in google
se ti venisse a mente qualcosa io so qua
Ciao:hail:
Ultima modifica effettuata da Federico1976 24/03/09 9:18
aaa
24/03/09 10:47
ruggy94
ma vuoi solo sapere se si intersecano o vuoi anche le coordinate del punto in cui si intersecano?
aaa
24/03/09 11:41
ruggy94
Allora...ho trovato del codice in Java qui: forum.html.it/forum/…;
l'ho tradotto in vb.net e l'ho trasformato in due overloads di una function.
Private Overloads Function Intersezione(ByVal x1 As Single, ByVal y1 As Single, ByVal x2 As Single, ByVal y2 As Single, ByVal x3 As Single, ByVal y3 As Single, ByVal x4 As Single, ByVal y4 As Single) As Point
        Dim a1 As Single = (y2 - y1)
        Dim b1 As Single = -1 * (x2 - x1)
        Dim c1 As Single = -1 + x1 * (y2 - y1) + y1 * (x2 - x1)

        Dim a2 As Single = (y4 - y3)
        Dim b2 As Single = -1 * (x4 - x3)
        Dim c2 As Single = -1 * x3 * (y4 - y3) + y3 * (x4 - x3)

        Dim Den As Single = (a1 * b2 - a2 * b1)
        If Den <> 0 Then
            Dim yp As Single = (a2 * c1 - a1 * c2) / Den
            Dim xp As Single = (b1 * c2 - b2 * c1) / Den
            Return New Point(xp, yp)
        Else
            Return Nothing
        End If
    End Function

    Private Overloads Function Intersezione(ByVal p1 As Point, ByVal p2 As Point, ByVal p3 As Point, ByVal p4 As Point) As Point
        Dim x1 As Single = p1.X
        Dim y1 As Single = p1.Y
        Dim x2 As Single = p2.X
        Dim y2 As Single = p2.Y
        Dim x3 As Single = p3.X
        Dim y3 As Single = p3.Y
        Dim x4 As Single = p4.X
        Dim y4 As Single = p4.Y

        Dim a1 As Single = (y2 - y1)
        Dim b1 As Single = -1 * (x2 - x1)
        Dim c1 As Single = -1 + x1 * (y2 - y1) + y1 * (x2 - x1)

        Dim a2 As Single = (y4 - y3)
        Dim b2 As Single = -1 * (x4 - x3)
        Dim c2 As Single = -1 * x3 * (y4 - y3) + y3 * (x4 - x3)

        Dim Den As Single = (a1 * b2 - a2 * b1)
        If Den <> 0 Then
            Dim yp As Single = (a2 * c1 - a1 * c2) / Den
            Dim xp As Single = (b1 * c2 - b2 * c1) / Den
            Return New Point(xp, yp)
        Else
            Return Nothing
        End If
    End Function


Un esempio di come puoi utilizzare questa function è:
Dim R As Point = Intersezione(2, 2, 8, 8, 10, 10, 20, 20)
        If R = Nothing Then
            MsgBox("Parallele")
        Else
            MsgBox("Si intersecano nel punto (" & R.X & ";" & R.Y & ")")
        End If

In questo esempio ho utilizzato il primo overload della funzione, che richiede in input le varie coordinate dei quattro punti che formano i due segmenti. Il secondo overload chiede in input direttamente i quattro punti...solo per comodità.
Se hai dubbi posta! :k:
aaa