Sierpinski pentagon: Difference between revisions
Content added Content deleted
(Added Rust solution) |
m (Output is vertically centred, use polygon instead of path) |
||
Line 925: | Line 925: | ||
Radius is Size/2 - 2 * Margin, |
Radius is Size/2 - 2 * Margin, |
||
Side is Radius * sin(pi/5) * 2, |
Side is Radius * sin(pi/5) * 2, |
||
Height is Side * (sin(pi/5) + sin(2 * pi/5)), |
|||
X is Size/2, |
X is Size/2, |
||
Y is |
Y is (Size - Height)/2, |
||
Scale_factor is 1/(2 + cos(2 * pi/5) * 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), |
||
Line 934: | Line 935: | ||
sierpinski_pentagon(Stream, X, Y, _, Side, 1):- |
sierpinski_pentagon(Stream, X, Y, _, Side, 1):- |
||
!, |
!, |
||
write(Stream, "< |
write(Stream, "<polygon stroke-width='1' stroke='black' fill='blue' points='"), |
||
format(Stream, ' |
format(Stream, '~g,~g', [X, Y]), |
||
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, " |
write(Stream, "'/>\n"). |
||
sierpinski_pentagon(Stream, X, Y, Scale_factor, Side, N):- |
sierpinski_pentagon(Stream, X, Y, Scale_factor, Side, N):- |
||
Side1 is Side * Scale_factor, |
Side1 is Side * Scale_factor, |
||
Line 951: | Line 952: | ||
Y1 is Y - sin(Angle) * Side, |
Y1 is Y - sin(Angle) * Side, |
||
Angle1 is Angle + 2 * pi/5, |
Angle1 is Angle + 2 * pi/5, |
||
format(Stream, ' |
format(Stream, ' ~g,~g', [X1, Y1]), |
||
write_pentagon_points(Stream, Side, Angle1, X1, Y1, N1). |
write_pentagon_points(Stream, Side, Angle1, X1, Y1, N1). |
||