Peano curve: Difference between revisions

5,335 bytes added ,  24 days ago
m
→‎{{header|Quackery}}: Added link to description of method
(Initial FutureBasic task solution added)
m (→‎{{header|Quackery}}: Added link to description of method)
 
(10 intermediate revisions by 5 users not shown)
Line 171:
PDF.Close;
end Peano_Curve;</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 # Peano 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 peano 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 := 90;
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 = ( "L"
, ( "L" -> "LFRFL-F-RFLFR+F+LFRFL"
, "R" -> "RFLFR+F+LFRFL-F-RFLFR"
)
);
STRING curve = ssc EVAL order;
curve INTERPRET ( ( CHAR c )VOID:
IF c = "F" 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 +:= 90 MODAB 360
ELIF c = "-" THEN
angle -:= 90 MODAB 360
FI
);
put( svg file, ( "'/>", newline, "</svg>", newline ) );
close( svg file )
FI # sierpinski square # ;
 
peano curve( "peano.svg", 1200, 12, 3, 50, 50 )
 
END
</syntaxhighlight>
 
=={{header|AutoHotkey}}==
Line 379 ⟶ 444:
{{out}}
[[Media:Peano_curve_cpp.svg]]
 
=={{header|EasyLang}}==
[https://easylang.online/show/#cod=jZK9boMwFIV3P8WRhbogrKQ/QwavnphYIwYXnMaqY5BNArx95YAJoR06INnnfNzje3Vb11QwfvRqaGHUTRkwyEE3lwTuapRPjiUYAXBqHAy6ZqKCAkDaBByUztfAVAm0he9cdZbOz7Vmf0Y0OPbwnWrxOlW0S9iDBKBPUdclOKrkyQVCGF8QpNiXW+LTKfmN/ZPMyF/H0MvLKiRavpdtHIm0d5cRRto4udrJPvoDRkj7BTb9bbRVva67M3bsLQiX5qYCRP4xLH2a2qOCPh45IOWoGo9au4c6BtVr+6yG9BgGQJmlYraqWGuHjIdX/+bSDZeuORYnMffOQXNKlqXhOAYBNBeFyDORFSIXRSrS+52CFuFba5GhKElcyfftMpLtyD9w2OGwI+QH 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$
.
.
proc lsysdraw axiom$ x y ang . .
linewidth 0.3
move x y
for c$ in strchars axiom$
if c$ = "F"
x += cos dir
y += sin dir
line x y
elif c$ = "-"
dir -= ang
elif c$ = "+"
dir += ang
.
.
.
axiom$ = "L"
rules$[] = [ "L" "LFRFL-F-RFLFR+F+LFRFL" "R" "RFLFR+F+LFRFL-F-RFLFR" ]
lsysexp 4 axiom$ rules$[]
lsysdraw axiom$ 5 90 90
</syntaxhighlight>
 
=={{header|Factor}}==
Line 430 ⟶ 535:
 
{{FormulaeEntry|page=https://formulae.org/?script=examples/Peano_curve}}
 
'''Solution'''
 
=== Peano-Meander variant, by recursion ===
 
[[File:Fōrmulæ - Peano curve 01.png]]
 
[[File:Fōrmulæ - Peano curve 02.png]]
 
[[File:Fōrmulæ - Peano curve 03.png]]
 
'''Test cases'''
 
=== Peano-Meander variant, 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 program that creates a Peano-Meander curve is:
 
[[File:Fōrmulæ - L-system - Peano-Meander curve 01.png]]
 
[[File:Fōrmulæ - L-system - Peano-Meander curve 02.png]]
 
=== Switch-back variant, by L-system ===
 
The program that creates a Switch-back Peano curve is:
 
[[File:Fōrmulæ - L-system - Peano Curve 01.png]]
 
[[File:Fōrmulæ - L-system - Peano Curve 02.png]]
 
=={{header|FreeBASIC}}==
Line 471 ⟶ 606:
end fn
 
local fn Peano( x as doublelong, y as doublelong, lg as doublelong, i1 as doublelong, i2 as doublelong )
ColorRef color = fn ColorRed
Line 507 ⟶ 642:
</syntaxhighlight>
{{output}}
[[File:Rosetta_Code_Peano_CurveRosetta_Code_Peano_Curve_rev.png]]
 
 
=={{header|Go}}==
Line 1,411 ⟶ 1,545:
 
=={{header|Quackery}}==
 
(Method is described at [[L-system#Quackery]].)
 
<syntaxhighlight lang="quackery"> [ $ "turtleduck.qky" loadfile ] now!
Line 1,910 ⟶ 2,046:
{{trans|Go}}
{{libheader|DOME}}
<syntaxhighlight lang="ecmascriptwren">import "graphics" for Canvas, Color, Point
import "dome" for Window
 
1,462

edits