Penrose tiling: Difference between revisions

Added Fōrmulæ entry
m (syntax highlighting fixup automation)
(Added Fōrmulæ entry)
 
(7 intermediate revisions by 5 users not shown)
Line 31:
* [http://preshing.com/20110831/penrose-tiling-explained/ Deflation explained for Kite and Dart, includes Python code (preshing.com)]
<br><br>
 
=={{header|11l}}==
{{trans|Python}}
 
<syntaxhighlight lang="11l">
F penrose(depth)
print(‘<svg viewBox="-100 -100 200 200" xmlns="http://www.w3.org/2000/svg">
<defs>
<path id="A0" d="M 80.90169943749474 58.778525229247315 L 0 0 100 0" stroke="black" fill="#8bc" />
<path id="B0" d="M 0 0 80.90169943749474 58.778525229247315 161.80339887498948 0" stroke="black" fill="#97e" />’)
 
L(d) 0 .< depth
print(‘ <g id="A’(d + 1)‘" transform="translate(100, 0) scale(0.6180339887498949)">
<use href="#A’d‘" transform="rotate(108)" />
<use href="#B’d‘" transform="scale(-1, 1)" />
</g>
<g id="B’(d + 1)‘">
<use href="#A’(d + 1)‘" />
<use href="#B’d‘" transform="translate(100, 0) scale(0.6180339887498949) rotate(144) translate(-80.90169943749474,-58.778525229247315)"/>
</g>’)
 
print(‘ <g id="G">
<use href="#A’depth‘"/>
<use href="#A’depth‘" transform="scale(1, -1)" />
</g>
</defs>
<g transform="scale(2, 2)">
<use href="#G" transform="rotate(-144)" />
<use href="#G" transform="rotate(-72)" />
<use href="#G" transform="rotate(0)" />
<use href="#G" transform="rotate(72)" />
<use href="#G" transform="rotate(144)" />
</g>
</svg>’)
 
penrose(6)
</syntaxhighlight>
 
=={{header|C++}}==
Line 120 ⟶ 157:
 
{{out}}
[[Media:Penrose tiling cpp.svg]]
Writes a file in SVG format similar to that produced by the Perl solution.
 
=={{header|EasyLang}}==
[https://easylang.online/show/#cod=jVTLbqQwELz7K0oWymFbRpnMbm4c/RXIBwOexIoDCJMM8/er5jXOzKy0EkKmqlztbgr6oasR4iW6qUdw3y4gh51895lh+AouZqVBLgCcugEBY7eoGAFg2wwFpFwfWVNn8C3iONTvdoir18qvEo8CB8TR9XhZHNu92FUJwJ823BsUqLMfLMDFil0CwsHcKqrB2Q8cfsC5eLTkXp6SIhsVz7bfRmLbmc1FLuJo64+Sj1XCiH6bYzPY86aecIFt3xDaN+SLX/CtO/tmfMdzfmTgs/t2LBT/MT5/WhqWWl6PPYEK1F1E4wf84lpX7sJc9O0jjk+yFQbgwu6uEnfeqAru4l5HNzr6h65MdNvUngpMD9HLQ7Txw72vSXwDijlG6550PMUKBii8mHQ4KZMmh5vZuQRPCkAdr3j6DrfgcETWGPAIKkN0f5Ni/8Y4RtJKyFoTNVoppSpdqnpeWW2IJGQlIYmhRpczzCLDTC0hldVElS6JaDExSkI2zCgGiKwuqZlXlTa8V3KWICWM2H4Cr7efv7iN9Z9nvo6v+C3EXw== Run it]
 
<syntaxhighlight>
proc lsysexp level . axiom$ rules$[] .
for l to level
an$ = ""
for c$ in strchars axiom$
for i = 1 step 2 to len rules$[]
if rules$[i] = c$
c$ = rules$[i + 1]
break 1
.
.
an$ &= c$
.
swap axiom$ an$
.
.
stack[] = [ ]
proc lsysdraw axiom$ x y ang lng . .
linewidth 0.3
move x y
for c$ in strchars axiom$
if c$ = "E"
x += cos dir * lng
y += sin dir * lng
line x y
elif c$ = "-"
dir -= ang
elif c$ = "+"
dir += ang
elif c$ = "["
stack[] &= x
stack[] &= y
stack[] &= dir
elif c$ = "]"
l = len stack[]
x = stack[l - 2]
y = stack[l - 1]
dir = stack[l]
len stack[] -3
move x y
.
.
.
axiom$ = "[b]++[b]++[b]++[b]++[b]"
rules$[] = [ "a" "cE++dE----bE[-cE----aE]++" "b" "+cE--dE[---aE--bE]+" "c" "-aE++bE[+++cE++dE]-" "d" "--cE++++aE[+dE++++bE]--bE" "E" "" ]
lsysexp 6 axiom$ rules$[]
lsysdraw axiom$ 50 50 36 4
</syntaxhighlight>
 
=={{header|FreeBASIC}}==
{{trans|Phython}}
Not much of a FreeBASIC program: majority of this code is string literals that dumps an SVG on output.
<syntaxhighlight lang="vb">Sub penrose(depth As Integer)
Dim As String svg
svg = "<svg viewBox=""-100 -100 200 200"" xmlns=""http://www.w3.org/2000/svg"">" + !"\n"
svg &= " <defs>" + !"\n"
svg &= " <path id=""A0"" d=""M 80.90169943749474 58.778525229247315 L 0 0 100 0"" stroke=""black"" fill=""#8bc"" />" + !"\n"
svg &= " <path id=""B0"" d=""M 0 0 80.90169943749474 58.778525229247315 161.80339887498948 0"" stroke=""black"" fill=""#97e"" />" + !"\n"
For d As Integer = 0 To 5
svg &= " <g id=""A" : svg &= (d+1) : svg &= """ transform=""translate(100, 0) scale(0.6180339887498949)"">" + !"\n"
svg += " <use href=" & """" & "#A" & d & """ transform=""rotate(108)"" />" + !"\n"
svg &= " <use href=" & """" & "#B" & d & """ transform=""scale(-1, 1)"" />" + !"\n"
svg &= " </g>" + !"\n"
svg &= " <g id=""B" & d+1 & """>" + !"\n"
svg &= " <use href=" & """" & "#A" & d+1 & """ />" + !"\n"
svg &= " <use href=" & """" & "#B" & d & """ transform=""translate(100, 0) scale(0.6180339887498949) rotate(144) translate(-80.90169943749474,-58.778525229247315)""/>" + !"\n"
svg &= " </g>" + !"\n"
Next
svg &= " <g id=""G"">" + !"\n"
svg &= " <use href=""#A6""/>" + !"\n"
svg &= " <use href=""#A6"" transform=""scale(1, -1)"" />" + !"\n"
svg &= " </g>" + !"\n"
svg &= " </defs>" + !"\n"
svg &= " <g transform=""scale(2, 2)"">" + !"\n"
svg &= " <use href=""#G"" transform=""rotate(-144)"" />" + !"\n"
svg &= " <use href=""#G"" transform=""rotate(-72)"" />" + !"\n"
svg &= " <use href=""#G"" transform=""rotate(0)"" />" + !"\n"
svg &= " <use href=""#G"" transform=""rotate(72)"" />" + !"\n"
svg &= " <use href=""#G"" transform=""rotate(144)"" />" + !"\n"
svg &= " </g>" + !"\n"
svg &= "</svg>"
Print #1, svg
End Sub
 
Open "Penrose_tiling.svg" For Output As #1
penrose(6)
Close #1</syntaxhighlight>
 
=={{header|Fōrmulæ}}==
 
{{FormulaeEntry|page=https://formulae.org/?script=examples/L-system}}
 
'''Solution'''
 
It can be done using an [[wp:L-system|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 program that creates a Penrose tiling is:
 
[[File:Fōrmulæ - L-system - Penrose tiling 01.png]]
 
[[File:Fōrmulæ - L-system - Penrose tiling 02.png]]
 
=={{header|Go}}==
Line 1,446 ⟶ 1,591:
{{libheader|Wren-set}}
{{libheader|Wren-polygon}}
<syntaxhighlight lang="ecmascriptwren">import "graphics" for Canvas, Color
import "dome" for Window
import "math" for Math
2,120

edits