Newsgroup: it.comp.www.php
Titolo: Domandone (griglie ,blocchi e logica)

Più per curiosità che per altro mi trovo di fronte al problema di dover
riempire un'area con dei solidi. Da css ho un <div> rettangolare vuoto
che andrebbe riempito con ritagli di immagini presi da un db. 
Praticamente l'algoritmo dovrebbe riempire la griglia con le immagini 
prese dal db e poi tappare i buchi rimasti con dei blocchi singoli.
In partenza ho una griglia di questo tipo:
http://pay.lalista.org/esculapio/grid.jpg
cioè blocchi modulari separati da un margine interno.
Il risultato dovrebbe essere qualcosa del genere:
http://pay.lalista.org/esculapio/grid_filled.jpg
 (il solido bianco con
lo scarabocchio sta per qualsiasi solido della misura di 1 blocco)
cioè la griglia riempita con solidi che vanno dalla dimensione minima di
un singolo blocco a quella massima (teoricamente) dell'intera griglia.
Il bello è che il riempimento dovrebbe avvenire dinamicamente.
Insomma una specie di tetris che però non deve lasciare vuoti.
La prima cosa che mi è venuta in mente è stata creare dinamicamente un 
<sub_div> per ogni ritaglio e ficcarlo dentro il <div> ma ho qualche 
problema di logica.
Ad esempio (la prima che mi viene in mente): se tra alcuni solidi più 
grandi resta isolato un blocco vuoto, come faccio a sapere che è vuoto?
Più in generale: come fa un solido a "sapere" che cosa ha intorno?
Come base di partenza si può pensare a un meccanismo basato su x e y 
(che poi sarebbero top e left del relativo <sub_div>) di ogni solido?
qualsiasi suggerimento è gradito.
Grazie.

 grandi resta isolato un blocco vuoto, come faccio a sapere che č vuoto?
Basta guardare la griglia come ad una matrice (array di array),
inizialmente riempita di false: ad ogni blocco riempito con l'immagine,
setti a true la corrispettiva coppia di indici (i, j). Per capire se un
blocco č vuoto, ti basta controllare se sopra (i, j-1), sotto (i, j+1),
a destra (i-1, j) e a sinistra (i+1, j) ci siano immagini.
Ovviamente, stando attendo a non "sforare" con gli indici nei bordi.
Ciao.
Tristan

 
http://pay.lalista.org/esculapio/grid_filled.jpg
 (il solido bianco con
Starai mica cercando di vendere pixel anche tu ?
Tac
-- 
La netiquette prevede sign di al massimo quattro righe.
Purtroppo la mia sign in quattro righe non ci stà.

 Ovviamente, stando attendo a non "sforare" con gli indici nei bordi.
Ecco, l'array bidimensionale era un'altra soluzione che avevo intuito ma 
che non sapevo bene come implementare.
Grazie per l'imbeccata.

 Starai mica cercando di vendere pixel anche tu ?
???
Quella pagina non ha nulla che fare con la vendita di alcunché.

Dimenticavo: nel db ogni record, oltre all'immagine stessa) dispone di 
due campi che indicano quanti blocchi occupa l'immagine in orizzontale e 
in verticale.

 qualsiasi suggerimento è gradito.
Qualcosa del genere:
$coords=Array();
function settato($x, $y){
 global $coords;
 if(!isset($coords[$y])){
	return false;
 }
 $xi=(int)($x/30);
 if(!isset($coords[$y][$xi])){
	return false;
 }
 $xb=$x % 30;
 $xv=1 << $xb;
 return (($coords[$y][$xi] & $xv)>0);
}
function setta($x, $y){
global $coords;
 $xi=(int)($x/30);
 $xb=$x % 30;
 $coords[$y][$xi]=1 << $xb;
}
Per ogni blocco delle tue immagini usi setta($x, $y) con $x e $y le
coordinate di ogni suo blocco.
Finito di inserire le immagini fai un ciclo su tutta la griglia e quando
settato($x, $y) e' falso sai che in quel blocco non c'e' un'immagine.
Se devi controllare che nella posizione dove devi inserire un'immagine non
ce ne sia un'altra usa anche qui settato($x, $y) per ogni suo blocco.
'bye

  $coords[$y][$xi]=1 << $xb;
$coords[$y][$xi]= isset($coords[$y][$xi])?$coords[$y][$xi]|(1 << $xb):1 <<
$xb;
Bah, dimenticavo l'OR.
'bye