Sierpinski triangle/Graphical: Difference between revisions

m
(→‎{{header|evaldraw}}: add sierpinski solution)
(11 intermediate revisions by 6 users not shown)
Line 226:
 
}
</syntaxhighlight>
 
=={{header|ALGOL 68}}==
{{libheader|ALGOL 68-l-system}}
Generates an SVG file containing the curve using the L-System. Very similar to the Algol 68 Sierpinski square curve sample.
Note the Algol 68 L-System library source code is on a separate page on Rosetta Code - follow the above link and then to the Talk page.
<syntaxhighlight lang="algol68">
BEGIN # Sierpinski Triangle Curve in SVG #
# uses the RC Algol 68 L-System library for the L-System evaluation & #
# interpretation #
 
PR read "lsystem.incl.a68" PR # include L-System utilities #
 
PROC sierpinski triangle curve = ( STRING fname, INT size, length, order, init x, init y )VOID:
IF FILE svg file;
BOOL open error := IF open( svg file, fname, stand out channel ) = 0
THEN
# opened OK - file already exists and #
# will be overwritten #
FALSE
ELSE
# failed to open the file #
# - try creating a new file #
establish( svg file, fname, stand out channel ) /= 0
FI;
open error
THEN # failed to open the file #
print( ( "Unable to open ", fname, newline ) );
stop
ELSE # file opened OK #
 
REAL x := init x;
REAL y := init y;
INT angle := 0;
put( svg file, ( "<svg xmlns='http://www.w3.org/2000/svg' width='"
, whole( size, 0 ), "' height='", whole( size, 0 ), "'>"
, newline, "<rect width='100%' height='100%' fill='white'/>"
, newline, "<path stroke-width='1' stroke='black' fill='none' d='"
, newline, "M", whole( x, 0 ), ",", whole( y, 0 ), newline
)
);
 
LSYSTEM ssc = ( "F-G-G"
, ( "F" -> "F-G+F+G-F"
, "G" -> "GG"
)
);
STRING curve = ssc EVAL order;
curve INTERPRET ( ( CHAR c )VOID:
IF c = "F" OR c = "G" THEN
x +:= length * cos( angle * pi / 180 );
y +:= length * sin( angle * pi / 180 );
put( svg file, ( " L", whole( x, 0 ), ",", whole( y, 0 ), newline ) )
ELIF c = "+" THEN
angle +:= 120 MODAB 360
ELIF c = "-" THEN
angle -:= 120 MODAB 360
FI
);
put( svg file, ( "'/>", newline, "</svg>", newline ) );
close( svg file )
FI # sierpinski square # ;
 
sierpinski triangle curve( "sierpinski_triangle.svg", 1200, 12, 5, 200, 400 )
 
END
</syntaxhighlight>
 
Line 787 ⟶ 854:
 
SierpinskyTriangle(7, w*0.05, h*0.05, w*0.9, h*0.9)</syntaxhighlight>
 
=={{header|Bruijn}}==
 
Rendered using [https://lambda-screen.marvinborner.de/ lambda screen].
 
<syntaxhighlight lang="bruijn">y [[1 (0 0)] [1 (0 0)]]
 
# infinite depth
triangle [y [[0 1 [[0]] 1 1]]]
 
:import std/Number .
 
# limited depth
triangle-n [y [[[[1 0 [[0]] 0 0] (=?1 [[1]] (2 --1))]]] (+7)]
</syntaxhighlight>
 
=={{header|C}}==
Line 1,115 ⟶ 1,197:
 
=={{header|EasyLang}}==
[https://easylang.dev/show/#cod=fY3BCoMwEETv+Yq5l65RCOghH1PCKoG0kShS+/UmuiAe7O7pzczOjik6zMm/PgMCL/hixeR/DAIpAL7fZQtdKM87LlxSgs4nFxiaalMUDhOLU86eFrXgXlpZNMKXn4/DPl7/CVRockjgLnu2kCIlVguTt9NqAw== Run it]
[https://easylang.dev/ide/#run=proc%20triang%20lev%20x%20y%20size%20.%20.%0A%20%20%20if%20lev%20%3D%200%0A%20%20%20%20%20%20move%20x%20y%0A%20%20%20%20%20%20circle%200.15%0A%20%20%20else%0A%20%20%20%20%20%20lev%20-%3D%201%0A%20%20%20%20%20%20size%20%2F%3D%202%0A%20%20%20%20%20%20call%20triang%20lev%20x%20%2B%20size%20y%20size%0A%20%20%20%20%20%20call%20triang%20lev%20x%20%2B%20size%20%2F%202%20y%20%2B%20size%20size%0A%20%20%20%20%20%20call%20triang%20lev%20x%20y%20size%0A%20%20%20.%0A.%0Acall%20triang%208%205%205%2090%0A Run it]
 
<syntaxhighlight lang="easylang">
Line 1,125 ⟶ 1,207:
lev -= 1
size /= 2
call triang lev x + size y size
call triang lev x + size / 2 y + size size
call triang lev x y size
.
.
call triang 8 5 5 90
</syntaxhighlight>
 
 
 
=={{header|Erlang}}==
Line 1,191 ⟶ 1,271:
 
This makes use of sleep(millis); and refresh(); in the middle of a function to do the slow animation of triangles.
 
[[File:Evaldraw sierpinski.gif|thumb|alt=refresh allows for drawing outside the main () function|With sleep() we wait 1 milli before redraw any pixels with refresh()]]
 
<syntaxhighlight lang="c">
static calls=1000;
() {
setcol(255,255,255);
Line 1,316 ⟶ 1,398:
{{output}}
[[File:Sierpinski_triangle_in_FutureBasic.png]]
 
=={{header|Fōrmulæ}}==
 
{{FormulaeEntry|page=https://formulae.org/?script=examples/L-system}}
 
'''Solution'''
 
=== By L-system ===
 
There are generic functions written in Fōrmulæ to compute an L-system in the page [[L-system#Fōrmulæ | L-system]].
 
The script that creates a Sierpiński triangle is:
 
[[File:Fōrmulæ - L-system - Sierpiński triangle 01.png]]
 
[[File:Fōrmulæ - L-system - Sierpiński triangle 02.png]]
 
=== By chaos game ===
 
There is a function written in Fōrmulæ to create Sierpiński n-gons by the method known as chaos game in the page [[Chaos game#Fōrmulæ | chaos game]].
 
The script that creates a Sierpiński triangle is:
 
[[File:Fōrmulæ - Chaos game - Sierpiński triangle 01.png]]
 
[[File:Fōrmulæ - Chaos game - Sierpiński triangle 02.png]]
 
=== By Kronecker product ===
 
There is a function written in Fōrmulæ to create generic Kronecker product based fractal in the page [[Kronecker product based fractals#Fōrmulæ | Kronecker product based fractals]].
 
The script that creates a Sierpiński triangle is:
 
[[File:Fōrmulæ - Kronecker product based fractals 08.png]]
 
[[File:Fōrmulæ - Kronecker product based fractals 09.png]]
 
=== By elementary cellular automaton ===
 
There is a function written in Fōrmulæ to create images for the elementary cellular automaton in the page [[Elementary cellular automaton#Fōrmulæ | Elementary cellular automaton]].
 
All the rules 18, 22 , 23, 60, 82, 90, 102, 126, 129, 146, 153, 154, 161, 165, 167, 181, 182, 195, 210 and 218 produce Sierpiński triangles:
 
[[File:Fōrmulæ - Elementary cellular automaton - Sierpiński triangle 01.png]]
 
[[File:Fōrmulæ - Elementary cellular automaton - Sierpiński triangle 02.png]]
 
=={{header|gnuplot}}==
Line 3,157 ⟶ 3,285:
{{trans|Kotlin}}
{{libheader|DOME}}
<syntaxhighlight lang="ecmascriptwren">import "graphics" for Canvas, Color
import "dome" for Window
 
Line 3,188 ⟶ 3,316:
}
}</syntaxhighlight>
 
{{out}}
[[File:Wren-Sierpinski_triangle_Graphical.png|400px]]
 
=={{header|XPL0}}==
2,120

edits