Koch curve: Difference between revisions
Content added Content deleted
m (Renamed constant) |
(Added Prolog Solution) |
||
Line 1,101: | Line 1,101: | ||
kcurve(0, s) |
kcurve(0, s) |
||
popMatrix()</lang> |
popMatrix()</lang> |
||
=={{header|Prolog}}== |
|||
{{works with|SWI Prolog}} |
|||
Produces an SVG file showing a Koch snowflake. |
|||
<lang prolog>main:- |
|||
write_koch_snowflake('koch_snowflake.svg'). |
|||
write_koch_snowflake(File):- |
|||
open(File, write, Stream), |
|||
koch_snowflake(Stream, 600, 5), |
|||
close(Stream). |
|||
koch_snowflake(Stream, Size, N):- |
|||
format(Stream, "<svg xmlns='http://www.w3.org/2000/svg' width='~d' height='~d'>\n", |
|||
[Size, Size]), |
|||
write(Stream, "<rect width='100%' height='100%' fill='black'/>\n"), |
|||
write(Stream, "<path stroke-width='1' stroke='white' fill='none' d='"), |
|||
Sqrt3_2 = 0.86602540378444, |
|||
Length is Size * Sqrt3_2 * 0.95, |
|||
X0 is (Size - Length)/2, |
|||
Y0 is Size/2 - Length * Sqrt3_2/3, |
|||
X1 is X0 + Length/2, |
|||
Y1 is Y0 + Length * Sqrt3_2, |
|||
X2 is X0 + Length, |
|||
format(Stream, 'M ~g,~g ', [X0, Y0]), |
|||
koch_curve(Stream, X0, Y0, X1, Y1, N), |
|||
koch_curve(Stream, X1, Y1, X2, Y0, N), |
|||
koch_curve(Stream, X2, Y0, X0, Y0, N), |
|||
write(Stream, "z'/>\n</svg>\n"). |
|||
koch_curve(Stream, _, _, X1, Y1, 0):- |
|||
!, |
|||
format(Stream, 'L ~g,~g\n', [X1, Y1]). |
|||
koch_curve(Stream, X0, Y0, X1, Y1, N):- |
|||
N > 0, |
|||
Sqrt3_2 = 0.86602540378444, |
|||
N1 is N - 1, |
|||
Dx is X1 - X0, |
|||
Dy is Y1 - Y0, |
|||
X2 is X0 + Dx/3, |
|||
Y2 is Y0 + Dy/3, |
|||
X3 is X0 + Dx/2 - Dy * Sqrt3_2/3, |
|||
Y3 is Y0 + Dy/2 + Dx * Sqrt3_2/3, |
|||
X4 is X0 + 2 * Dx/3, |
|||
Y4 is Y0 + 2 * Dy/3, |
|||
koch_curve(Stream, X0, Y0, X2, Y2, N1), |
|||
koch_curve(Stream, X2, Y2, X3, Y3, N1), |
|||
koch_curve(Stream, X3, Y3, X4, Y4, N1), |
|||
koch_curve(Stream, X4, Y4, X1, Y1, N1).</lang> |
|||
=={{header|Python}}== |
=={{header|Python}}== |