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}}== |