geometric_shapes.pl 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/perl
  2. # Author: Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 02th December 2013
  5. # Website: https://trizenx.blgospot.com
  6. # This script tries to generate geometric shapes with a consistent internal angle size
  7. use 5.010;
  8. use strict;
  9. use autodie;
  10. use warnings;
  11. use GD::Simple;
  12. my $width = 3000;
  13. my $height = 3000;
  14. my $step = 1;
  15. my $len = 500;
  16. my $sides = 360;
  17. my $max_angle = 160;
  18. my $dir = 'Geometric shapes';
  19. (-d $dir) || (mkdir($dir));
  20. chdir($dir);
  21. for (my $angle = 30 ; $angle <= $max_angle ; $angle += $step) {
  22. my $p = GD::Simple->new($width, $height);
  23. $p->fgcolor('blue');
  24. $p->moveTo(1500, 1000);
  25. my %seen;
  26. my $text = '';
  27. my $valid = 0;
  28. foreach my $i (1 .. $sides) {
  29. if ($seen{join $;, $p->curPos}++) {
  30. $text = sprintf "%d degrees internal angle with %d sides", 180 - $angle, $i - 1;
  31. $valid = 1;
  32. last;
  33. }
  34. $p->turn($angle);
  35. $p->line($len);
  36. }
  37. $valid || next;
  38. say $text;
  39. # $p->moveTo($width / 2 - length($text) * 3, $height - 100);
  40. # $p->string($text);
  41. open my $fh, '>', sprintf("%05d.png", 180 - $angle);
  42. print {$fh} $p->png;
  43. close $fh;
  44. #system "geeqie", $img_file;
  45. #$? && exit $? << 8;
  46. }