Sierpinski triangle/Graphical: Difference between revisions

Content added Content deleted
m (Added Sidef language)
Line 1,125: Line 1,125:


Original source: [http://seed7.sourceforge.net/algorith/graphic.htm#sierpinski]
Original source: [http://seed7.sourceforge.net/algorith/graphic.htm#sierpinski]

=={{header|Sidef}}==
<lang ruby>func sierpinski_triangle(n) -> Array {
var triangle = ['*'];
{ |i|
var sp = (' ' * Math.pow(2, i-1));
triangle = (triangle.map {|x| sp + x + sp} +
triangle.map {|x| x + ' ' + x});
} * n;
triangle;
}

class Array {
method to_png(scale=1) {

var gd = (
try { require 'GD::Simple' }
catch { warn "GD::Simple is not installed!"; return };
);

var img = gd.new(self[0].len * scale, self.len * scale);

self.range.each { |i|
(i * scale) ..^ (i * scale + scale) -> each { |j|
var row = self[i];
img.moveTo(0, j);
loop {
if (row.sub!(/^(\s+)/); $1.len?) {
img.fgcolor('black');
img.line(scale * $1.len);
} elsif (row.sub!(/^(\S+)/); $1.len?) {
img.fgcolor('red');
img.line(scale * $1.len);
} else { break }
}
}
};

return img.png;
}
}

var triangle = sierpinski_triangle(8);
var raw_png = triangle.to_png;

var file = %f'triangle.png';
file.open('>:raw', \var fh, \var err)
|| die "Can't write to file '#{file}': #{err}";
fh.print(raw_png);
fh.close;</lang>


=={{header|Tcl}}==
=={{header|Tcl}}==