Dragon curve: Difference between revisions

(→‎{{header|Sidef}}: better code)
Line 5,009:
 
=={{header|Sidef}}==
Uses the '''LSystem()''' class from [https://rosettacode.org/wiki/Hilbert_curve#Sidef Hilbert curve].
{{trans|Perl}}
<lang ruby>definevar halfpirules = Num.pi/2Hash(
x => 'x+yF+',
y => '-Fx-y',
)
 
var lsys = LSystem(
# Computing the dragon with a L-System
width: 600,
var dragon = 'FX'
height: 600,
{
dragon.gsub!('X', 'x+yF+')
dragon.gsub!('Y', '-Fx-y')
dragon.tr!('xy', 'XY')
} * 10
 
xoff: -430,
# Drawing the dragon in SVG
yoff: -380,
var (x, y) = (100, 100)
var theta = 0
var r = 2
 
len: }8,
print <<'EOT'
angle: 90,
<?xml version='1.0' encoding='utf-8' standalone='no'?>
color: 'dark green',
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN'
)
'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg width='100%' height='100%' version='1.1'
xmlns='http://www.w3.org/2000/svg'>
EOT
 
lsys.execute('Fx', 11, "dragon_curve.png", rules)</lang>
dragon.each { |c|
Output image: [https://github.com/trizen/rc/blob/master/img/dragon_curve-sidef.png Dragon curve]
given(c) {
when ('F') {
printf("<line x1='%.0f' y1='%.0f' ", x, y)
printf("x2='%.0f' ", x += r*cos(theta))
printf("y2='%.0f' ", y += r*sin(theta))
printf("style='stroke:rgb(0,0,0);stroke-width:1'/>\n")
}
when ('+') { theta += halfpi }
when ('-') { theta -= halfpi }
}
}
 
print '</svg>'</lang>
Generates a SVG image to the standard output.
 
=={{header|Smalltalk}}==
2,756

edits