mitch78 (Normal User)
Newbie
Messaggi: 4
Iscritto: 03/12/2006
|
Ciao!!Devo leggere un txt file, un file di due colonne con coordinate X e Y, e inserire queste coordinate come array in due text box, uno con le coordinate x e uno con le coordinate y.Il code mi da un'errore, credo dipenda dal fatto che non mi riconosce i valori di x e y da inserire nei textbox.Qualcuno saprebbe aiutarmi?
Private Sub cmdRead_Click()
Dim FullFileName As String 'Stores the file with fullpath
'store the filename in a string
FullFileName = filInputFile.Path + "\" + filInputFile.FileName
Open FullFileName For Input As #1
Dim xylist() As Double, xlist As Double, ylist As Double, n As Integer
Do Until EOF(1) 'loop till end of file on channel 1
Input #1, xlist, ylist
ReDim Preserve xylist(n + 1)
lstX.Text = xlist
lstY.Test = xlist
Loop
Close #1
End Sub
|
|
Reese (Ex-Member)
Pro
Messaggi: 179
Iscritto: 09/08/2006
|
Che errore ti da'? Comunque, tu non stai inserendo le coordinate, ma i valori in quelle coordinate.
Un'altra cosa: non usare Redim Preserve dentro un ciclo, e' davvero molto lento. Piuttosto dichiara prima un array grande, e alla fine usi Redim Preserve.
|
|
mitch78 (Normal User)
Newbie
Messaggi: 4
Iscritto: 03/12/2006
|
Grazie per il consiglio per il Dim Preserve!!Per quanto riguarda l`altro problema l`ho risolto usando le listBox. Ora sono alle prese con un problema impossibile:calcolare l'area di un poligono contentente un`altro poligono, cioe` la differenza tra le due aree..Fin qua e`tutto facile, ho le mie due listBox X1 e Y1 per un poligono,X2 e Y2 per l`altro, calcolo le due aree e faccio la differenza. Il problema e` come dichiarare che i poligoni non possono intersecarsi...
|
|
Reese (Ex-Member)
Pro
Messaggi: 179
Iscritto: 09/08/2006
|
Cioe' devi fare in modo che se si inseriscono le coordinate di due poligoni, ti dica se si intersecano o no?
1) Si tratta di un qualsiasi tipo di poligono?
Prima, devi cercare le coordinate x e y maggiori e minori per ogni poligono. Sia x1min l'ascissa del punto più a sinistra del poligono maggiore; x1max l'ascissa del punto più a destra (cioè maggiore); y1min l'ordinata minore e y1max l'ordinata maggiore. Siano x2min,x2max,y2min,y2max le coordinate corrispondenti per il poligono minore.
if (x1min<x2min and x1max>x2max and y1min<y2min and y1max>y2max) then
|
|
mitch78 (Normal User)
Newbie
Messaggi: 4
Iscritto: 03/12/2006
|
Grande!
Mi hai risolto uno dei due problemi, cioè con
"If (x1min<x2min and x1max>x2max and y1min<y2min and y1max>y2max) then ..."
Posso sapere se un poligono è inserito all'interno di un altro. Però i suoi lati potrebbero lo stesso intersecarsi...
Per quanto riguarda i poligoni, sono poligoni semplici, chiusi che non si auto intersecano loro stessi e tra di loro.Ho appena trovato questo code in rete, se lo capisco potrebbe funzionare:
This example treats the segments as parameterized vectors:
X = X1 + t * (X2 - X1), Y = Y1 + t * (Y2 - Y1)
X = A1 + s * (A2 - A1), Y = B1 + s * (B2 - B1)
where the parameters s and t vary from 0 to 1. It solves these equations for s and t to see where the lines intersect. If the segments intersect, then s and t are both between 0.0 and 1.0.
' Return True if the segments intersect.
Private Function SegmentsIntersect(ByVal X1 As Single, _
ByVal Y1 As Single, ByVal X2 As Single, ByVal Y2 As _
Single, ByVal A1 As Single, ByVal B1 As Single, ByVal _
A2 As Single, ByVal B2 As Single) As Boolean
Dim dx As Single
Dim dy As Single
Dim da As Single
Dim db As Single
Dim t As Single
Dim s As Single
dx = X2 - X1
dy = Y2 - Y1
da = A2 - A1
db = B2 - B1
If (da * dy - db * dx) = 0 Then
' The segments are parallel.
SegmentsIntersect = False
Exit Function
End If
s = (dx * (B1 - Y1) + dy * (X1 - A1)) / (da * dy - db * _
dx)
t = (da * (Y1 - B1) + db * (A1 - X1)) / (db * dx - da * _
dy)
SegmentsIntersect = (s >= 0# And s <= 1# And _
t >= 0# And t <= 1#)
' If it exists, the point of intersection is:
' (x1 + t * dx, y1 + t * dy)
End Function
GRAZIE ANCORA
|
|
mitch78 (Normal User)
Newbie
Messaggi: 4
Iscritto: 03/12/2006
|
Sfortunatamente la tua formula mi risolve molti casi ma anche se x1min<x2min and x1max>x2max and y1min<y2min and y1max>y2max) non sempre il poligono 2 e` inserito nel poligono 1 (se disegni un grande poligono e uno piccolino sopra un lato del grande che e` parallelo all`asse x te ne accorgi). Credo che bisogna lavorare sugli angoli ma le formule sono troppo complesse..Grazie per l`aiuto!!
|
|
()
Newbie
Messaggi:
Iscritto:
|
Qua si parla di geometria e disequazioni nel piano cartesiano.
trova il sistema di disequazioni lineari che denotino il poligono (devi trovare l'equazione delle rette dei segmenti di questo e porli > o < di 0 a seconda dei valori che vuoi).
Poi se un punto del poligono interno non rispetta queste disquazioni( ovvero che le rende false
(es. 3 > 5)) vuol dire che si intersecano e quindi il punto non è accettabile.
Almeno credo che sia questo il metodo giusto. è argomento di tanti anni fa...
Ultima modifica effettuata da il 11/12/2006 alle 14:50 |
|