Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:
Hi, I made an animated gif and would like your advice about it. It's an animation of a spinning circle. I have built a circle with plenty of pixels, and put the coordinates in 2 arrays. Furthermore i have divided the animation in different angles, meaning that image2 is 30 gegrees, image3 is 60 degrees etc. So i have 6 images. The animation has a lot of code, 200 lines, while it looks more like a 20 line program as it is very basic. Maybe in stead off making a new image for every different angle, I could use 1 loop to go through these angles and make those images from inside this loop. Maybe I could go through these arrays once i.s.o. for every new image. Maybe using those arrays wasn't a good idea after all, etc. Anyway any comments or ideas would be highly appreciated.
use GD; use warnings; $img = new GD::Image(400,400); $white = $img->colorAllocate(0,0,0); $red=$img->colorAllocate(200,0,0); $straal = 50; for($teller=0;$teller<((3.141592*2));$teller+=0.001){ $yy = $straal * sin($teller); $xx = $straal * cos($teller); $x = 200+$xx; $y = 200+$yy; $img->setPixel($x,$y,$red); if($x<200){ push @punten1,[$x,$y];} else{ push @punten2,[$x,$y];} } $data = $img->gifanimbegin(1,0); $data.=$img->gifanimadd(1,0,0,10); $img2 = new GD::Image(400,400); $white = $img2->colorAllocate(0,0,0); $red=$img2->colorAllocate(200,0,0); $hoek=(3.141592/2)/3; for($tel=0;$tel<$#punten1;$tel++){ @een =($punten1[$tel][0],$punten1[$tel][1],0); $straal =200-$punten1[$tel][0]; $diep = $straal*sin($hoek); $breed = $straal-($straal*cos($hoek)); $een[0]+=$breed; $een[2]+=$diep; if($een[2]>0){ $x1 =$een[0] + (sqrt($een[2]**2/2)/2); $y1=$een[1] - (sqrt($een[2]**2/2)/2);} else{ $x1 =$een[0] - (sqrt($een[2]**2/2)/2); $y1=$een[1] + (sqrt($een[2]**2/2)/2);} $img2->setPixel($x1,$y1,$red); } for($tel=0;$tel<$#punten2;$tel++){ @een =($punten2[$tel][0],$punten2[$tel][1],0); $straal =$punten2[$tel][0]-200; $diep = $straal*sin($hoek); $breed = $straal-($straal*cos($hoek)); $een[0]-=$breed; $een[2]-=$diep; if($een[2]>0){ $x1 =$een[0] + (sqrt($een[2]**2/2)/2); $y1=$een[1] - (sqrt($een[2]**2/2)/2);} else{ $x1 =$een[0] - (sqrt($een[2]**2/2)/2); $y1=$een[1] + (sqrt($een[2]**2/2)/2);} $img2->setPixel($x1,$y1,$red); } $data.=$img2->gifanimadd(1,0,0,10); $img3 = new GD::Image(400,400); $white = $img3->colorAllocate(0,0,0); $red=$img3->colorAllocate(200,0,0); $hoek=((3.141592/2)/3)*2; for($tel=0;$tel<$#punten1;$tel++){ @een =($punten1[$tel][0],$punten1[$tel][1],0); $straal =200-$punten1[$tel][0]; $diep = $straal*sin($hoek); $breed = $straal-($straal*cos($hoek)); $een[0]+=$breed; $een[2]+=$diep; if($een[2]>0){ $x1 =$een[0] + (sqrt($een[2]**2/2)/2); $y1=$een[1] - (sqrt($een[2]**2/2)/2);} else{ $x1 =$een[0] - (sqrt($een[2]**2/2)/2); $y1=$een[1] + (sqrt($een[2]**2/2)/2);} $img3->setPixel($x1,$y1,$red); } for($tel=0;$tel<$#punten2;$tel++){ @een =($punten2[$tel][0],$punten2[$tel][1],0); $straal =$punten2[$tel][0]-200; $diep = $straal*sin($hoek); $breed = $straal-($straal*cos($hoek)); $een[0]-=$breed; $een[2]-=$diep; if($een[2]>0){ $x1 =$een[0] + (sqrt($een[2]**2/2)/2); $y1=$een[1] - (sqrt($een[2]**2/2)/2);} else{ $x1 =$een[0] - (sqrt($een[2]**2/2)/2); $y1=$een[1] + (sqrt($een[2]**2/2)/2);} $img3->setPixel($x1,$y1,$red); } $data.=$img3->gifanimadd(1,0,0,10); $img4 = new GD::Image(400,400); $white = $img4->colorAllocate(0,0,0); $red=$img4->colorAllocate(200,0,0); $hoek=(3.141592/2); for($tel=0;$tel<$#punten1;$tel++){ @een =($punten1[$tel][0],$punten1[$tel][1],0); $straal =200-$punten1[$tel][0]; $diep = $straal*sin($hoek); $breed = $straal-($straal*cos($hoek)); $een[0]+=$breed; $een[2]+=$diep; if($een[2]>0){ $x1 =$een[0] + (sqrt($een[2]**2/2)/2); $y1=$een[1] - (sqrt($een[2]**2/2)/2);} else{ $x1 =$een[0] - (sqrt($een[2]**2/2)/2); $y1=$een[1] + (sqrt($een[2]**2/2)/2);} $img4->setPixel($x1,$y1,$red); } for($tel=0;$tel<$#punten2;$tel++){ @een =($punten2[$tel][0],$punten2[$tel][1],0); $straal =$punten2[$tel][0]-200; $diep = $straal*sin($hoek); $breed = $straal-($straal*cos($hoek)); $een[0]-=$breed; $een[2]-=$diep; if($een[2]>0){ $x1 =$een[0] + (sqrt($een[2]**2/2)/2); $y1=$een[1] - (sqrt($een[2]**2/2)/2);} else{ $x1 =$een[0] - (sqrt($een[2]**2/2)/2); $y1=$een[1] + (sqrt($een[2]**2/2)/2);} $img4->setPixel($x1,$y1,$red); } $data.=$img4->gifanimadd(1,0,0,10); $img5 = new GD::Image(400,400); $white = $img5->colorAllocate(0,0,0); $red=$img5->colorAllocate(200,0,0); $hoek=((3.141592/2)/3)*2; for($tel=0;$tel<$#punten1;$tel++){ @een =($punten1[$tel][0],$punten1[$tel][1],0); $straal =200-$punten1[$tel][0]; $diep = $straal*sin($hoek); $breed = $straal-($straal*cos($hoek)); $een[0]+=$breed; $een[2]-=$diep; if($een[2]>0){ $x1 =$een[0] + (sqrt($een[2]**2/2)/2); $y1=$een[1] - (sqrt($een[2]**2/2)/2);} else{ $x1 =$een[0] - (sqrt($een[2]**2/2)/2); $y1=$een[1] + (sqrt($een[2]**2/2)/2);} $img5->setPixel($x1,$y1,$red); } for($tel=0;$tel<$#punten2;$tel++){ @een =($punten2[$tel][0],$punten2[$tel][1],0); $straal =$punten2[$tel][0]-200; $diep = $straal*sin($hoek); $breed = $straal-($straal*cos($hoek)); $een[0]-=$breed; $een[2]+=$diep; if($een[2]>0){ $x1 =$een[0] + (sqrt($een[2]**2/2)/2); $y1=$een[1] - (sqrt($een[2]**2/2)/2);} else{ $x1 =$een[0] - (sqrt($een[2]**2/2)/2); $y1=$een[1] + (sqrt($een[2]**2/2)/2);} $img5->setPixel($x1,$y1,$red); } $data.=$img5->gifanimadd(1,0,0,10); $img6 = new GD::Image(400,400); $white = $img6->colorAllocate(0,0,0); $red=$img6->colorAllocate(200,0,0); $hoek=((3.141592/2)/3); for($tel=0;$tel<$#punten1;$tel++){ @een =($punten1[$tel][0],$punten1[$tel][1],0); $straal =200-$punten1[$tel][0]; $diep = $straal*sin($hoek); $breed = $straal-($straal*cos($hoek)); $een[0]+=$breed; $een[2]-=$diep; if($een[2]>0){ $x1 =$een[0] + (sqrt($een[2]**2/2)/2); $y1=$een[1] - (sqrt($een[2]**2/2)/2);} else{ $x1 =$een[0] - (sqrt($een[2]**2/2)/2); $y1=$een[1] + (sqrt($een[2]**2/2)/2);} $img6->setPixel($x1,$y1,$red); } for($tel=0;$tel<$#punten2;$tel++){ @een =($punten2[$tel][0],$punten2[$tel][1],0); $straal =$punten2[$tel][0]-200; $diep = $straal*sin($hoek); $breed = $straal-($straal*cos($hoek)); $een[0]-=$breed; $een[2]+=$diep; if($een[2]>0){ $x1 =$een[0] + (sqrt($een[2]**2/2)/2); $y1=$een[1] - (sqrt($een[2]**2/2)/2);} else{ $x1 =$een[0] - (sqrt($een[2]**2/2)/2); $y1=$een[1] + (sqrt($een[2]**2/2)/2);} $img6->setPixel($x1,$y1,$red); } $data.=$img6->gifanimadd(1,0,0,10); $data.=$img6->gifanimend; binmode STDOUT; print $data;
Thank you.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: advice about animated gif.
by RMGir (Prior) on Dec 24, 2013 at 11:16 UTC | |
|
Re: advice about animated gif.
by Laurent_R (Canon) on Dec 24, 2013 at 10:47 UTC |