Oppure

Loading
10/07/12 18:30
Uno sciame di API
Ciao a tutti, ho bisogno di sapere come calcolare i punti intermedi ad un segmento conoscendo i punti di inizio e di fine! Mi spiego meglio, quando passo questi due punti ad una funzione, quest'ultima deve calcolare tutti i punti intermedi ai punti passati, non il punto medio. Per esempio il punto A ha le coordinate (0;0) mentre il punto B ha le coordinate (10;10). Ora la funzione dovrà inserire in una lista di punti i punti:
0;0
1;1
2;2
ecc.
e non 5;5 (il punto medio). Avevo pensato di disegnare la retta su di una bitmap e poi leggere i pixel con il colore della retta ma non mi sembra un modo molto elegante e inoltre è lentissimo (ho provato)! :)
Come posso risolvere?
Grazie!
aaa
10/07/12 18:38
nessuno
La questione è solamente geometrica non grafica.

Ma non ho capito esattamente cosa devi calcolare alla fine ... ti serve il punto medio dati i punti iniziale e finale?

it.wikipedia.org/wiki/…
Ultima modifica effettuata da nessuno 10/07/12 18:38
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
10/07/12 19:04
Uno sciame di API
Postato originariamente da nessuno:

La questione è solamente geometrica non grafica.

Ma non ho capito esattamente cosa devi calcolare alla fine ... ti serve il punto medio dati i punti iniziale e finale?

it.wikipedia.org/wiki/…


No, non mi serve il punto medio, l'ho anche scritto. :yup:
Praticamente devo calcolare TUTTI i punti della retta. Forse con un'immagine mi spiego meglio! :)
aaa
10/07/12 19:10
nessuno
I punti in un segmento sono infiniti ...

Devi quindi definire un "passo" orizzontale (o verticale) e impostare un ciclo apposito.
In base al valore del ciclo (sia X o Y) calcoli l'altra coordinata in base alla nota formula che ottiene le coordinate di un punto appartenente a un segmento dato.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
11/07/12 7:43
Uno sciame di API
Ho risolto! :)
Grazie nessuno, mi sei stato molto di aiuto. :hail:
Se a quelcuno potesse servire, questa è la funzione:

    Function PointsToArray(ByVal p1 As Point, ByVal p2 As Point)
        Dim s, p As Size
        Dim punti As New List(Of Point)
        If p1.Equals(p2) = True Then
            punti.Add(New Point(p1.X, p1.Y)) 'se i punti sono uguali non esegue tutta la funzione
        Else
            s = New Size(((p1.X - p2.X) ^ 2) ^ 0.5, ((p1.Y - p2.Y) ^ 2) ^ 0.5) 'imposta come dimensioni di s il valore assoluto della differenza dei due punti
            'Questi if controllano quali sono i lati più corti e li impostano come dimensioni di p
            If p1.X > p2.X Then
                p.Width = p2.X
            Else
                p.Width = p1.X
            End If
            If p1.Y > p2.Y Then
                p.Height = p2.Y
            Else
                p.Height = p1.Y
            End If
            'imposta un "passo" adatto in base alle dimensioni di s
            If s.Width > s.Height Then
                For x = 0 To s.Width
                    punti.Add(New Point(x, s.Height * x / s.Width))
                Next
            Else
                For y = 0 To s.Height
                    punti.Add(New Point(s.Width * y / s.Height, y))
                Next
            End If

            If p1.X < p2.X And p1.Y > p2.Y Then
                punti.Reverse() 'inverte i valore nell'array
                For n = 0 To punti.Count - 1
                    punti.Item(n) = New Point(s.Width - punti.Item(n).X, punti.Item(n).Y) 'e con un ciclo cambia il valore di x
                Next
            ElseIf p1.X > p2.X And p1.Y > p2.Y Then
                punti.Reverse() 'inverte i valore nell'array
            End If
            For n = 0 To punti.Count - 1
                punti.Item(n) = New Point(punti.Item(n).X + p.Width, punti.Item(n).Y + p.Height) 'tramite un ciclo for somma alle coordinate i valori di p
            Next
        End If
        Return punti
    End Function
Ultima modifica effettuata da Uno sciame di API 11/07/12 8:52
aaa