Sierpinski curve: Difference between revisions
Content added Content deleted
(→{{header|Fōrmulæ}}: Added L-system solution) |
m (Dialects of BASIC moved to the BASIC section.) |
||
Line 549: | Line 549: | ||
Return |
Return |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
=={{header|BASIC}}== |
|||
==={{header|FreeBASIC}}=== |
|||
{{trans|XPL0}} |
|||
<syntaxhighlight lang="vb">#define pi 4 * Atn(1) |
|||
#define yellow Rgb(255,255,0) |
|||
Dim Shared As Integer posX, posY |
|||
Dim Shared As Single direc |
|||
Sub Dibuja(largo As Integer) |
|||
posX += Fix(largo * Cos(direc)) |
|||
posY -= Fix(largo * Sin(direc)) |
|||
Line - (posX, posY), yellow |
|||
End Sub |
|||
Sub Curva(orden As Integer, angulo As Single, long1 As Single, long2 As Single) |
|||
If orden <> 0 Then |
|||
direc += angulo |
|||
Curva(orden-1, -angulo, long1, long2) |
|||
direc -= angulo |
|||
Dibuja(long1) |
|||
direc -= angulo |
|||
Curva(orden-1, -angulo, long1, long2) |
|||
direc += angulo |
|||
End If |
|||
End Sub |
|||
Screenres 640, 480, 32 |
|||
Dim As Single ang45 = pi / 4 |
|||
Dim As Byte orden = 3 |
|||
Dim As Byte tam = 20 |
|||
direc = 0 |
|||
posX = 640/4 |
|||
posY = 3*480/4 |
|||
Pset (posX, posY) |
|||
For c As Byte = 1 To 4 |
|||
Curva(orden*2, ang45, tam/Sqr(2), 5*tam/6) |
|||
direc += ang45 |
|||
Dibuja(tam/Sqr(2)) |
|||
direc += ang45 |
|||
Next |
|||
Windowtitle "Hit any key to end program" |
|||
Sleep</syntaxhighlight> |
|||
==={{header|Yabasic}}=== |
|||
<syntaxhighlight lang="yabasic">// Rosetta Code problem: http://rosettacode.org/wiki/Sierpinski_curve |
|||
// Adapted from https://www.ocg.at/sites/ocg.at/files/EuroLogo2001/P74Batagelj.pdf to Yabasic by Galileo, 01/2022 |
|||
import turtle |
|||
sub Sierp(n, a, h, k) |
|||
if n = 0 move(k) : return |
|||
turn(a) : Sierp(n - 1, -a, h, k) : turn(-a) : move(h) |
|||
turn(-a) : Sierp(n - 1, -a, h, k) : turn(a) |
|||
end sub |
|||
sub Sierpinski(n, d) |
|||
local i |
|||
pen(false) |
|||
goxy(10, 680) |
|||
pen(true) |
|||
color 255, 255, 0 |
|||
for i = 1 to 4 |
|||
Sierp(n, 45, d/sqrt(2), 5*d/6) |
|||
turn(45) |
|||
move(d/sqrt(2)) |
|||
turn(45) |
|||
next |
|||
end sub |
|||
startTurtle() |
|||
Sierpinski(9, 12) </syntaxhighlight> |
|||
=={{header|C++}}== |
=={{header|C++}}== |
||
Line 748: | Line 825: | ||
[[File:Fōrmulæ - L-system - Sierpiński curve 02.png]] |
[[File:Fōrmulæ - L-system - Sierpiński curve 02.png]] |
||
=={{header|FreeBASIC}}== |
|||
{{trans|XPL0}} |
|||
<syntaxhighlight lang="vb">#define pi 4 * Atn(1) |
|||
#define yellow Rgb(255,255,0) |
|||
Dim Shared As Integer posX, posY |
|||
Dim Shared As Single direc |
|||
Sub Dibuja(largo As Integer) |
|||
posX += Fix(largo * Cos(direc)) |
|||
posY -= Fix(largo * Sin(direc)) |
|||
Line - (posX, posY), yellow |
|||
End Sub |
|||
Sub Curva(orden As Integer, angulo As Single, long1 As Single, long2 As Single) |
|||
If orden <> 0 Then |
|||
direc += angulo |
|||
Curva(orden-1, -angulo, long1, long2) |
|||
direc -= angulo |
|||
Dibuja(long1) |
|||
direc -= angulo |
|||
Curva(orden-1, -angulo, long1, long2) |
|||
direc += angulo |
|||
End If |
|||
End Sub |
|||
Screenres 640, 480, 32 |
|||
Dim As Single ang45 = pi / 4 |
|||
Dim As Byte orden = 3 |
|||
Dim As Byte tam = 20 |
|||
direc = 0 |
|||
posX = 640/4 |
|||
posY = 3*480/4 |
|||
Pset (posX, posY) |
|||
For c As Byte = 1 To 4 |
|||
Curva(orden*2, ang45, tam/Sqr(2), 5*tam/6) |
|||
direc += ang45 |
|||
Dibuja(tam/Sqr(2)) |
|||
direc += ang45 |
|||
Next |
|||
Windowtitle "Hit any key to end program" |
|||
Sleep</syntaxhighlight> |
|||
=={{header|Go}}== |
=={{header|Go}}== |
||
Line 2,062: | Line 2,093: | ||
]; |
]; |
||
]</syntaxhighlight> |
]</syntaxhighlight> |
||
=={{header|Yabasic}}== |
|||
<syntaxhighlight lang="yabasic">// Rosetta Code problem: http://rosettacode.org/wiki/Sierpinski_curve |
|||
// Adapted from https://www.ocg.at/sites/ocg.at/files/EuroLogo2001/P74Batagelj.pdf to Yabasic by Galileo, 01/2022 |
|||
import turtle |
|||
sub Sierp(n, a, h, k) |
|||
if n = 0 move(k) : return |
|||
turn(a) : Sierp(n - 1, -a, h, k) : turn(-a) : move(h) |
|||
turn(-a) : Sierp(n - 1, -a, h, k) : turn(a) |
|||
end sub |
|||
sub Sierpinski(n, d) |
|||
local i |
|||
pen(false) |
|||
goxy(10, 680) |
|||
pen(true) |
|||
color 255, 255, 0 |
|||
for i = 1 to 4 |
|||
Sierp(n, 45, d/sqrt(2), 5*d/6) |
|||
turn(45) |
|||
move(d/sqrt(2)) |
|||
turn(45) |
|||
next |
|||
end sub |
|||
startTurtle() |
|||
Sierpinski(9, 12) </syntaxhighlight> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |