Sierpinski pentagon: Difference between revisions

(Added XPL0 example.)
 
(7 intermediate revisions by 4 users not shown)
Line 515:
}
}</syntaxhighlight>
 
=={{header|EasyLang}}==
{{Trans|Processing}}
[https://easylang.dev/show/#cod=pZHNrsIgEIX3PMVJ3GgbsSVpdNOHacroJemFBog/by+DqHXh3Vx2w/mYc2ZwXpNHj06sIMaJBi8mY+lidPxBI5UI4zBRAlrssFaoMbqAvUIFteE3s3cjZrJxODmLK24IRhM0zamBhBQAzLHUPRqu0/l1Z2K6lEfnMdhTdmoQIs3sER3U4VCQdK6o++z/QKts9ZZvLAdjv8g818IyJ6MpPIkcu0oNeOByp02I6B9SXYjFAv4Xnpv/Ef5T/rbhLdrlPFJI8UJVh7ZD18DlT2b0Dg== Run it]
<syntaxhighlight lang="easylang">
order = 5
#
clear
linewidth 0.2
scale = 1 / (2 + cos 72 * 2)
#
proc pentagon x y side depth . .
if depth = 0
move x y
for angle = 0 step 72 to 288
x += cos angle * side
y += sin angle * side
line x y
.
else
side *= scale
dist = side + side * cos 72 * 2
for angle = 0 step 72 to 288
x += cos angle * dist
y += sin angle * dist
pentagon x y side depth - 1
.
.
.
pentagon 25 15 50 order - 1
</syntaxhighlight>
 
=={{header|FreeBASIC}}==
{{trans|XPL0}}
<syntaxhighlight lang="vb">#define pi 4 * Atn(1)
#define yellow Rgb(255,255,0)
 
Dim As Byte orden = 5 'can also set this to 1, 2, 3, or 4
 
Dim Shared As Single deg72
deg72 = 72 * pi / 180 '72 degrees in radians
Dim As Integer HW = 640/2
Dim As Byte tam = 20
Dim As Integer radio = HW - 2*tam
Dim Shared As Single ScaleFactor
 
Sub DrawPentagon(posX As Integer, posY As Integer, largo As Single, fondo As Byte)
Dim As Byte i
Dim As Single angulo = 3 * deg72, dist
If fondo = 0 Then
Pset (posX, posY)
For i = 0 To 4
posX += Fix(largo * Cos(angulo))
posY -= Fix(largo * Sin(angulo))
Line - (posX, posY), yellow
angulo += Deg72
Next
Else
largo *= ScaleFactor
dist = largo * (1 + Cos(Deg72) * 2)
For i = 0 To 4
posX += Fix(dist * Cos(angulo))
posY -= Fix(dist * Sin(angulo))
DrawPentagon(posX, posY, largo, fondo-1)
angulo += deg72
Next
End If
End Sub
 
Screenres 640, 640, 32
 
ScaleFactor = 1 / (2 + Cos(Deg72) * 2)
Dim As Single largo
largo = radio * Sin(Pi/5) * 2
DrawPentagon (HW, 3*tam, largo, orden-1)
 
Windowtitle "Hit any key to end program"
Sleep</syntaxhighlight>
 
=={{header|Go}}==
Line 835 ⟶ 913:
Clicking Pentaflake you can see orders 1-6 of it in different colors.
</pre>
 
=={{header|jq}}==
'''Adapted from [[#Julia|Julia]]'''
 
'''Works with jq, the C implementation of jq'''
 
'''Works with gojq, the Go implementation of jq'''
 
The following program produces an SVG image.
To produce the .svg file, use a command such as:
<pre>
jq -nr -f sierpinski-pentagon.jq > sierpinski-pentagon.svg
</pre>
where "sierpinski-pentagon.jq" is a file containing the program shown
below.
 
The .svg file can conveniently be viewed as a graphic using a browser,
or an editor such as Emacs or Aquamacs.
<syntaxhighlight lang="jq">
### Generic functions
 
def addComplex(stream): reduce stream as [$x,$y] ([0,0]; .[0] += $x | .[1] += $y);
 
def lpad($len; $x): tostring | ($len - length) as $l | ($x * $l) + .;
 
# Input: an array
def multiply($x): map(. * $x);
 
# Round to approx $ndec places
def round($ndec): pow(10;$ndec) as $p | . * $p | round / $p;
 
def power($a; $b): reduce range(0;$b) as $i (1; . * $a);
 
def tau: 8 * atan2(1; 1);
 
def tobase($b):
def digit: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[.:.+1];
def mod: . % $b;
def div: ((. - mod) / $b);
def digits: recurse( select(. > 0) | div) | mod ;
# For jq it would be wise to protect against `infinite` as input, but using `isinfinite` confuses gojq
select( (tostring|test("^[0-9]+$")) and 2 <= $b and $b <= 36)
| if . == 0 then "0"
else [digits | digit] | reverse[1:] | add
end;
 
### Sierpinski Pentagons
 
def svgHead($width):
"<svg height=\"\($width)\" width=\"\($width)\" style=\"fill:blue\"",
"version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">";
 
def svgEnd: "</svg>";
 
# SVG height and width will be 2 * dim
def pentagon($dim):
def sides: 5;
def order: 5;
def scale: (3 - (order | sqrt)) / 2;
 
def cis: [cos, sin];
def orders:
[range(0; order) | ((1 - scale) * $dim) * power(scale ; .) ];
def vertices:
tau as $tau | [range(0; sides) | ( . * $tau / sides | cis)];
svgHead(2*$dim),
(orders as $orders
| vertices as $vertices
| range(1; 1 + power(sides; order)) as $i
| [ ($i|tobase(sides) | lpad(order; "0") | split("")[]) | $vertices[tonumber]] as $varr
| addComplex(range(0; $orders|length) as $i | $varr[$i] | multiply($orders[$i])) as $vector
| ($vertices | map( addComplex($vector, multiply($orders[-1] * (1-scale))))) as $vprod
| ($vprod | map( map(round(3)) | "\(.[0]) \(.[1])") | join(" ")) as $points
| "<polygon points=\"\($points)\" transform=\"translate(\($dim),\($dim)) rotate(-18)\" />"),
svgEnd ;
 
pentagon(250)
</syntaxhighlight>
{{output}}
See [[#Julia|Julia]].
 
 
=={{header|Julia}}==
Line 1,625 ⟶ 1,785:
(formerly Perl 6)
{{works with|rakudo|2018-10}}
[[File:Perl6 pentaflake.svg|300x300px|thumb|right|5th order pentaflake]]
<syntaxhighlight lang="raku" line>constant $sides = 5;
constant order = 5;
Line 1,646 ⟶ 1,807:
$fh.say: '</svg>';
$fh.close;</syntaxhighlight>
 
See [http://rosettacode.org/mw/images/5/57/Perl6_pentaflake.svg 5th order pentaflake]
 
=={{header|Ruby}}==
Line 2,006 ⟶ 2,165:
{{libheader|DOME}}
Black backgound and slightly different palette to Go. Also pentagons are unfilled.
<syntaxhighlight lang="ecmascriptwren">import "graphics" for Canvas, Color
import "dome" for Window
import "math" for Math
Line 2,068 ⟶ 2,227:
 
var Game = SierpinskiPentagon.new(640, 640)</syntaxhighlight>
 
{{out}}
[[File:Wren-Sierpinski_pentagon.png|400px]]
 
=={{header|XPL0}}==
2,515

edits