Koch curve: Difference between revisions
Content added Content deleted
(Moved BASIC 256 to the right place) |
(Added Algol 68) |
||
Line 192: | Line 192: | ||
Doc.Close; |
Doc.Close; |
||
end Koch_Curve;</syntaxhighlight> |
end Koch_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. |
|||
<br/> |
|||
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 # Koch Curve in SVG - based on the Sierpinski square curve Algol 68 & # |
|||
# FreeBASIC samples # |
|||
# 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 koch 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++F++F" |
|||
, ( "F" -> "F-F++F-F" |
|||
) |
|||
); |
|||
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 +:= 60 MODAB 360 |
|||
ELIF c = "-" THEN |
|||
angle -:= 60 MODAB 360 |
|||
FI |
|||
); |
|||
put( svg file, ( "'/>", newline, "</svg>", newline ) ); |
|||
close( svg file ) |
|||
FI # sierpinski square # ; |
|||
koch curve( "koch.svg", 600, 5, 4, 150, 150 ) |
|||
END |
|||
</syntaxhighlight> |
|||
=={{header|Amazing Hopper}}== |
=={{header|Amazing Hopper}}== |
||
Line 288: | Line 356: | ||
back |
back |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
=={{header|AutoHotkey}}== |
=={{header|AutoHotkey}}== |