-
Notifications
You must be signed in to change notification settings - Fork 34
/
chaos_game_triangle.pl
executable file
·52 lines (39 loc) · 1.06 KB
/
chaos_game_triangle.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/perl
# Daniel "Trizen" Șuteu
# License: GPLv3
# Date: 25 August 2016
# https://github.com/trizen
# Chaos game, generating a Sierpinski triangle, as described by Keith Peters in his presentation.
# See: https://www.youtube.com/watch?v=e0JaZuLfZ_0 (starting from 18:03)
use 5.010;
use strict;
use warnings;
use Imager;
my $width = 1000;
my $height = 1000;
my @points = (
[int(rand($width)), 0],
[0, int(rand($height))],
[int(rand($height)), $height - 1],
);
my $img = Imager->new(
xsize => $width,
ysize => $height,
channels => 3,
);
my $color = Imager::Color->new('#ff0000');
my $r = [int(rand($width)), int(rand($height))];
foreach my $i (1 .. 100000) {
my $p = $points[rand @points];
my $h = [
int(($p->[0] + $r->[0]) / 2),
int(($p->[1] + $r->[1]) / 2),
];
$img->setpixel(
x => $h->[0],
y => $h->[1],
color => $color,
);
$r = $h;
}
$img->write(file => 'chaos_game_triangle.png');