Sierpinski pentagon: Difference between revisions
Content added Content deleted
(Added Prolog Solution) |
m (Use the pi function built into SWI Prolog) |
||
Line 924: | Line 924: | ||
Margin = 5, |
Margin = 5, |
||
Radius is Size/2 - 2 * Margin, |
Radius is Size/2 - 2 * Margin, |
||
⚫ | |||
pi(Pi), |
|||
⚫ | |||
X is Size/2, |
X is Size/2, |
||
Y is 3 * Margin, |
Y is 3 * Margin, |
||
Scale_factor is 1/(2 + cos(2 * |
Scale_factor is 1/(2 + cos(2 * pi/5) * 2), |
||
sierpinski_pentagon(Stream, X, Y, Scale_factor, Side, Order), |
sierpinski_pentagon(Stream, X, Y, Scale_factor, Side, Order), |
||
write(Stream, "</svg>\n"), |
write(Stream, "</svg>\n"), |
||
close(Stream). |
close(Stream). |
||
pi(3.14159265359). |
|||
sierpinski_pentagon(Stream, X, Y, _, Side, 1):- |
sierpinski_pentagon(Stream, X, Y, _, Side, 1):- |
||
Line 939: | Line 936: | ||
write(Stream, "<path stroke-width='1' stroke='black' fill='blue' d='"), |
write(Stream, "<path stroke-width='1' stroke='black' fill='blue' d='"), |
||
format(Stream, 'M ~g,~g ', [X, Y]), |
format(Stream, 'M ~g,~g ', [X, Y]), |
||
pi |
Angle is 6 * pi/5, |
||
Angle is 6 * Pi/5, |
|||
write_pentagon_points(Stream, Side, Angle, X, Y, 5), |
write_pentagon_points(Stream, Side, Angle, X, Y, 5), |
||
write(Stream, "z'/>\n"). |
write(Stream, "z'/>\n"). |
||
Line 946: | Line 942: | ||
Side1 is Side * Scale_factor, |
Side1 is Side * Scale_factor, |
||
N1 is N - 1, |
N1 is N - 1, |
||
pi |
Angle is 6 * pi/5, |
||
Angle is 6 * Pi/5, |
|||
sierpinski_pentagons(Stream, X, Y, Scale_factor, Side1, Angle, N1, 5). |
sierpinski_pentagons(Stream, X, Y, Scale_factor, Side1, Angle, N1, 5). |
||
Line 953: | Line 948: | ||
write_pentagon_points(Stream, Side, Angle, X, Y, N):- |
write_pentagon_points(Stream, Side, Angle, X, Y, N):- |
||
N1 is N - 1, |
N1 is N - 1, |
||
pi(Pi), |
|||
X1 is X + cos(Angle) * Side, |
X1 is X + cos(Angle) * Side, |
||
Y1 is Y - sin(Angle) * Side, |
Y1 is Y - sin(Angle) * Side, |
||
Angle1 is Angle + 2 * |
Angle1 is Angle + 2 * pi/5, |
||
format(Stream, 'L ~g,~g ', [X1, Y1]), |
format(Stream, 'L ~g,~g ', [X1, Y1]), |
||
write_pentagon_points(Stream, Side, Angle1, X1, Y1, N1). |
write_pentagon_points(Stream, Side, Angle1, X1, Y1, N1). |
||
Line 963: | Line 957: | ||
sierpinski_pentagons(Stream, X, Y, Scale_factor, Side, Angle, N, I):- |
sierpinski_pentagons(Stream, X, Y, Scale_factor, Side, Angle, N, I):- |
||
I1 is I - 1, |
I1 is I - 1, |
||
⚫ | |||
pi(Pi), |
|||
⚫ | |||
X1 is X + cos(Angle) * Distance, |
X1 is X + cos(Angle) * Distance, |
||
Y1 is Y - sin(Angle) * Distance, |
Y1 is Y - sin(Angle) * Distance, |
||
Angle1 is Angle + 2 * |
Angle1 is Angle + 2 * pi/5, |
||
sierpinski_pentagon(Stream, X1, Y1, Scale_factor, Side, N), |
sierpinski_pentagon(Stream, X1, Y1, Scale_factor, Side, N), |
||
sierpinski_pentagons(Stream, X1, Y1, Scale_factor, Side, Angle1, N, I1).</lang> |
sierpinski_pentagons(Stream, X1, Y1, Scale_factor, Side, Angle1, N, I1).</lang> |