pi_turtle.pl 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/usr/bin/perl
  2. use 5.014;
  3. use strict;
  4. use warnings;
  5. use GD::Simple;
  6. my $pi = do {
  7. local $/;
  8. <DATA> =~ tr/0-9//dcr;
  9. };
  10. my $img = 'GD::Simple'->new(10000, 6000);
  11. $img->fgcolor('blue');
  12. $img->moveTo(5000, 3000);
  13. sub pi {
  14. my $x = substr($pi, 0, 2, '');
  15. $x =~ s/^0+//;
  16. pi() if !length($x) and length($pi);
  17. $x;
  18. }
  19. while (length($pi)) {
  20. $img->fgcolor('white');
  21. my $p_i = pi() || 0;
  22. $img->line($p_i * ($p_i / sqrt($p_i + 1)) + $p_i);
  23. foreach $_ (0 .. $p_i + $p_i) {
  24. $img->fgcolor('green');
  25. $img->turn($p_i);
  26. $img->line(-$p_i);
  27. $img->line(-$p_i);
  28. $img->line(-$p_i);
  29. $img->line(-$p_i);
  30. $img->fgcolor('gray');
  31. $img->turn(-$p_i);
  32. $img->line($p_i);
  33. $img->line($p_i);
  34. $img->line($p_i);
  35. $img->line($p_i);
  36. $img->fgcolor('blue');
  37. $img->turn(-$p_i);
  38. $img->line($p_i);
  39. $img->fgcolor('purple');
  40. $img->turn($p_i);
  41. $img->line(-$p_i);
  42. $img->fgcolor('red');
  43. $img->turn($p_i);
  44. $img->line(-$p_i);
  45. }
  46. }
  47. my $image_name = 'pi_art_turtle.png';
  48. open my $p, '>:raw', $image_name or die $!;
  49. print $p $img->png;
  50. close $p;
  51. __DATA__
  52. 3.14159265358979323846264338327950288419716939937510582097494459230
  53. 7816406286208998628034825342117067982148086513282306647093844609550
  54. 5822317253594081284811174502841027019385211055596446229489549303819
  55. 6442881097566593344612847564823378678316527120190914564856692346034
  56. 8610454326648213393607260249141273724587006606315588174881520920962
  57. 8292540917153643678925903600113305305488204665213841469519415116094
  58. 3305727036575959195309218611738193261179310511854807446237996274956
  59. 7351885752724891227938183011949129833673362440656643086021394946395
  60. 2247371907021798609437027705392171762931767523846748184676694051320
  61. 0056812714526356082778577134275778960917363717872146844090122495343
  62. 0146549585371050792279689258923542019956112129021960864034418159813
  63. 6297747713099605187072113499999983729780499510597317328160963185950
  64. 2445945534690830264252230825334468503526193118817101000313783875288
  65. 6587533208381420617177669147303598253490428755468731159562863882353
  66. 7875937519577818577805321712268066130019278766111959092164201989380