fibonacci_spirals.pl 851 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/perl
  2. # Author: Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 18 July 2015
  5. # https://github.com/trizen
  6. #
  7. ## Generate a Fibonacci cluster of spirals.
  8. #
  9. use 5.010;
  10. use strict;
  11. use warnings;
  12. use GD::Simple;
  13. my $img = 'GD::Simple'->new(8000, 8000);
  14. $img->moveTo(3500, 3500);
  15. sub t($) {
  16. $img->turn(shift);
  17. }
  18. sub l($) {
  19. $img->line(shift);
  20. }
  21. sub c($) {
  22. $img->fgcolor(shift);
  23. }
  24. sub fibonacci(&$) {
  25. my ($callback, $n) = @_;
  26. my @fib = (1, 1);
  27. for (1 .. $n - 2) {
  28. $callback->($fib[0]);
  29. @fib = ($fib[-1], $fib[-1] + $fib[-2]);
  30. }
  31. $callback->($_) for @fib;
  32. }
  33. c 'red';
  34. for my $i (1 .. 180) {
  35. fibonacci {
  36. l $_[0]**(1 / 11);
  37. t $i;
  38. }
  39. $i;
  40. t 0;
  41. }
  42. my $image_name = 'fibonacci_spirals.png';
  43. open my $fh, '>:raw', $image_name or die $!;
  44. print {$fh} $img->png;
  45. close $fh;