di quanti punti stiamo parlando?
una idea potrebbe essere quella di generare tutti i punti possibili che si discostano al max di un tot, metterli in un array, randomizzarlo ed estrarli tutti quanti; così sarai sicuro di aver riempito tutta la 'zona'
ti posto una bozza che non tiene conto di eventuali punti già inseriti in quella zona (neanche il punto iniziale stesso
) e che ovviamente genera una nube a quadrato non circolare
Codice PHP:
class punto {
public $x,$y;
public function __construct($x = 0, $y = 0) {
$this->x = $x;
$this->y = $y;
}
}
function swarm($p, $size){ // punto iniziale e massimo discostamento
$points = array();
$startx = $p->x - $size;
$starty = $p->x + $size;
$endx = $p->x + $size;
$endy = $p->y - $size;
while($starty >= $endy){ // genero tutti i punti possibili
$x = $startx;
while($x <= $endx){
//echo $x.' '.$starty."\n";
$points[]=new punto($x,$starty);
$x++;
}
$starty--;
}
shuffle($points); // randomizzo
return $points;
}
$pu = new punto(3,3);
$nube = swarm($pu,2);
print_r($nube);