Federico1976 (Normal User)
Rookie
Messaggi: 42
Iscritto: 23/03/2009
|
Questo topic è stato chiuso dal moderatore 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
|
|
fabriziorocca (Normal User)
Guru
Messaggi: 1162
Iscritto: 22/03/2009
|
chiedi a Totem , lui è un esperto di VB.NET !!!
|
|
Federico1976 (Normal User)
Rookie
Messaggi: 42
Iscritto: 23/03/2009
|
Ti ringrazio della risposta ma come posso chiedere?
|
|
fabriziorocca (Normal User)
Guru
Messaggi: 1162
Iscritto: 22/03/2009
|
|
|
ruggy94 (Member)
Guru
Messaggi: 890
Iscritto: 21/04/2008
|
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.
|
|
Federico1976 (Normal User)
Rookie
Messaggi: 42
Iscritto: 23/03/2009
|
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
Ultima modifica effettuata da Federico1976 il 24/03/2009 alle 10:18 |
|
ruggy94 (Member)
Guru
Messaggi: 890
Iscritto: 21/04/2008
|
ma vuoi solo sapere se si intersecano o vuoi anche le coordinate del punto in cui si intersecano?
|
|
ruggy94 (Member)
Guru
Messaggi: 890
Iscritto: 21/04/2008
|
Allora...ho trovato del codice in Java qui: http://forum.html.it/forum/showthread.php?threadid=1310708;
l'ho tradotto in vb.net e l'ho trasformato in due overloads di una function.
Codice sorgente - presumibilmente VB.NET |
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 è:
Codice sorgente - presumibilmente VB.NET |
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! |
|
Federico1976 (Normal User)
Rookie
Messaggi: 42
Iscritto: 23/03/2009
|
Sei un Grande Ora provo subito Grazzie Mille
|
|