PDA

Visualizza la versione completa : Algoritmo[un po di teoria]


afrappe
18-01-2005, 11:29
a prescidere dal linguaggio di programmazione, vorrei realizzare una procedura, algoritmo, routine non saprei nemmeno come chiamarla, per disporre delle piccole figure in maniera uniforme su uno spazio , chi mi puo dare qulche spunto?
cioe dato un determinato spazio che puo' essere per esempio una contenitore di immagini(picture box in visualbasic6) e dato un numero di immagini, come fare per farele distribuire piu o meno uniformemente? chiaramente lo spazio a disposizione rimane sempre lo stesso e il numero di immagini puo' variare,
vorrei realizare qualcosa tipo l'immagine allegata

smprog
18-01-2005, 12:03
E' da verificare ma inizierei a provare così: trovo le dimensioni del contenitore (larghezza per altezza in pixel) e la divido per il numero di elementi da sistemare
Dopo di chè partendo dall'angolo in alto a destra e contanto il numero di pixel andando riga per riga, sistemerei gli elementi ad una distanza pari al numero trovato prima con la divisione.
(Nota: se l'ultimo pixel della prima riga è il 100, il primo della seconda riga è il 101).
Forse non sono stato chiarissimo... :confused:

smprog
18-01-2005, 12:16
mmmh... no, come non detto... mi sa che non funziona mica tanto bene; facendo così c'è la possibilità ad esempio di trovarmi tutti gli elementi uno sopra l'altro e quindi non distribuiti uniformemente

afrappe
18-01-2005, 12:17
diciamo che tu intendi sistemarli su un'ipotetica griglia, potrebbe essere senz'altro un idea e anche piuttosto rapida e semplice da realizzare, quello che vorrei ottenere pero' e qualcosa di meno schematico e meno incolonnato, forse potrei ottenere quello che desidero utilizzando la tua soluzione "sfalsando" le righe in modo da non avere le figure incolonnate,
credo pero che per ottenere una distribuzione diciamo omogenea sparpagliata si debba ricorrere a qualche formula matematicha degli insiemi o roba del genere.
intanto grazie per la tua soluzione che sembra la piu praticabile, rimango pero in attesa anche di altre soluzioni.
:)

afrappe
18-01-2005, 12:18
Originariamente inviato da smprog
mmmh... no, come non detto... mi sa che non funziona mica tanto bene; facendo così c'è la possibilità ad esempio di trovarmi tutti gli elementi uno sopra l'altro e quindi non distribuiti uniformemente
hehehheh infatti l'avevo intuito, ma piano piano ci arriviamo
:ciauz:

lelefante
18-01-2005, 20:56
Qualche domanda chiarificatrice:

le figure hanno tutte le stesse dimensioni, o sono variabili?
esiste un ordine da rispettare (o da preferire) con cui inserire le immagini?
cosa fare se la dimensione totale delle immagini supera quella a disposizione?


Salut! :ciauz:

afrappe
19-01-2005, 09:58
Originariamente inviato da lelefante
Qualche domanda chiarificatrice:

le figure hanno tutte le stesse dimensioni, o sono variabili?
esiste un ordine da rispettare (o da preferire) con cui inserire le immagini?
cosa fare se la dimensione totale delle immagini supera quella a disposizione?


Salut! :ciauz:

figure tutte uguali

nessun ordine da rispettare

non fa niente le immagini le sovrappongo qualora non ci fosse lo spazio sufficente(io direi che per semplificare il problema conviene immaginare che piu che immagini siano punti) poi alla fine piazzero la figura centrata sul punto trovato e se si sovrappongono non è un problema

pippopoppo
20-01-2005, 12:00
Se L è la lunghezza totale delle immagini allineate (diciamo in px)
e l è la lunghezza di una immagine (in px, hai detto che sono tutte uguali)
allora puoi costruire la griglia prendendo

X = L / l;
Y = L % l;

Quello che farei io sarebbe di "deformare" mediante una qualche trasformazione. Es, (con c "piccolo")
X = X+c*X*Y;
Y = Y+c*X*Y;

te le sposta lungo una iperbole. Le immagini vicino agli assi rimangono essenzialmente dove sono, quelle lungo la diagonale
si allontanano. Oppure provi con qualche trasformazione casuale,
tipo
X = X+rand();
Y = Y+rand();

In realtà dipende da quello che vuoi fare..

afrappe
20-01-2005, 12:17
faro delle prove, grazie ;-)

lelefante
23-01-2005, 15:37
Originariamente inviato da afrappe
figure tutte uguali

nessun ordine da rispettare
...

Visto che le figure sono tutte uguali direi che la strategia più semplice è quella di dividere lo spazio in una griglia (un po' come ti è già stato suggerito).

La prima cosa da decidere è quante righe e quante colonne usare: se n è il numero totale di immagini con
sqrt(n) (approssimato all'intero superiore) ottieni il numero di righe (uguale al numero di colonne).

Poi dividi la larghezza dell'area a disposizione per il numero di colonne e l'altezza dell'area per il numero di righe.
In questo modo ottieni le dimensioni di ogni cella...da lì puoi scegliere la strategia che preferisci, quindi tenere in considerazione eventuali margini/spaziature tra ogni immagine e tra le immagini e i bordi dell'area a disposizione

Loading