| 
	
 | 
 Posted by Norman Peelman on 11/24/06 20:49 
"marko" <marko@nullepart.eu> wrote in message 
news:4566f0b7$0$17493$426a74cc@news.free.fr... 
> Hi everyone, 
> I'm looking for a way to draw a line that will zig-zag its way thru an 
> image randomly, crisscrossing itself many times, based on random numbers 
> _and_ php. 
> 
> To give you an idea of what I'd like to do, here's a link to a gif : 
> http://www.chaosmos.net/chaosmoseng/chaosmos7.htm 
> 
> I've spent a lot of time googling about how to draw that kind of line 
> with php but I only came across how to draw texts, charts and pies. 
> 
> Is there a way to do that or am I barking up the wrong tree? 
> 
> Thanks for your answers 
> 
> marko 
 
 
You need to use the GD image functions: 
 
0) pick number (random?) of iterations for entire image 
1) pick a random start point ($startX, $startY) 
2) pick a random direction to move in ($directionX, $directionY), could 
be -1, 0, or 1 for each 
3) pick a random number of moves ($move) 
4) loop $move times placing pixels in the image 
5) loop back to 2 
 
basic code snippet (uses no 'real' math), you'll need to read up on some 
geometric math to do fancier. 
--- 
 
// create image here 
 
$directions = array(-1,0,1); 
 
$startX = rand(0, $imageW); // image width 
$startY = rand(0, $imageH); // image height 
$iterations = rand(5000,15000); // 10000 iterations 
for ($main_loop = 0; $main_loop <= $iterations, $main_loop++) 
{ 
    $tmp = rand(0,2); 
    $directionX = $directions[$tmp]; 
    $tmp = rand(0,2); 
    $directionY = $directions[$tmp]; 
 
    $moves = rand(5,100); 
 
    for ($draw_loop = 0, $draw_loop <= $moves, $draw_loop++) 
    { 
        if ((($startX + $directionX) >= 0) AND (($startX + $directionX) <= 
$imageW))) 
        { 
            $startX += $directionX; 
        } 
        if ((($startY + $directionY) >= 0) AND (($startY + $directionY) <= 
$imageH))) 
        { 
            $startY += $directionY; 
        } 
        // place pixel draw function here using $startX, and $startY as the 
coords 
    } 
} 
// output image here 
--- 
 
Can probably be done with less code, but this is just off the top of my head 
to get you started... 
 
Norm
 
[Back to original message] 
 |