Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - array in Text Box
Forum - Visual Basic 6 - array in Text Box

Avatar
mitch78 (Normal User)
Newbie


Messaggi: 4
Iscritto: 03/12/2006

Segnala al moderatore
Postato alle 18:41
Domenica, 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?:asd:

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

PM Quote
Avatar
Reese (Ex-Member)
Pro


Messaggi: 179
Iscritto: 09/08/2006

Segnala al moderatore
Postato alle 12:02
Giovedì, 07/12/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.

PM Quote
Avatar
mitch78 (Normal User)
Newbie


Messaggi: 4
Iscritto: 03/12/2006

Segnala al moderatore
Postato alle 15:42
Giovedì, 07/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...

PM Quote
Avatar
Reese (Ex-Member)
Pro


Messaggi: 179
Iscritto: 09/08/2006

Segnala al moderatore
Postato alle 15:42
Sabato, 09/12/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

PM Quote
Avatar
mitch78 (Normal User)
Newbie


Messaggi: 4
Iscritto: 03/12/2006

Segnala al moderatore
Postato alle 17:12
Sabato, 09/12/2006
Grande!:k:
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:asd:

PM Quote
Avatar
mitch78 (Normal User)
Newbie


Messaggi: 4
Iscritto: 03/12/2006

Segnala al moderatore
Postato alle 12:19
Lunedì, 11/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).:-o Credo che bisogna lavorare sugli angoli ma le formule sono troppo complesse..Grazie per l`aiuto!! :):)

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:48
Lunedì, 11/12/2006
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
PM Quote