12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #!/usr/bin/perl
- # Author: Daniel "Trizen" Șuteu
- # License: GPLv3
- # Date: 08 June 2016
- # Website: https://github.com/trizen
- # See: https://rosettacode.org/wiki/Pythagoras_tree
- # https://en.wikipedia.org/wiki/Pythagoras_tree_(fractal)
- use Imager;
- sub tree {
- my ($img, $x1, $y1, $x2, $y2, $depth) = @_;
- return () if $depth <= 0;
- my $dx = ($x2 - $x1);
- my $dy = ($y1 - $y2);
- my $x3 = ($x2 - $dy);
- my $y3 = ($y2 - $dx);
- my $x4 = ($x1 - $dy);
- my $y4 = ($y1 - $dx);
- my $x5 = ($x4 + 0.5 * ($dx - $dy));
- my $y5 = ($y4 - 0.5 * ($dx + $dy));
- # Square
- $img->polygon(
- points => [
- [$x1, $y1],
- [$x2, $y2],
- [$x3, $y3],
- [$x4, $y4],
- ],
- color => [0, 255 / $depth, 0],
- );
- # Triangle
- $img->polygon(
- points => [
- [$x3, $y3],
- [$x4, $y4],
- [$x5, $y5],
- ],
- color => [0, 255 / $depth, 0],
- );
- tree($img, $x4, $y4, $x5, $y5, $depth - 1);
- tree($img, $x5, $y5, $x3, $y3, $depth - 1);
- }
- my ($width, $height) = (1920, 1080);
- my $img = Imager->new(xsize => $width, ysize => $height);
- $img->box(filled => 1, color => 'white');
- tree($img, $width/2.3, $height, $width/1.8, $height, 10);
- $img->write(file => 'pythagoras_tree.png');
|