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 3 * Margin,
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, "<path stroke-width='1' stroke='black' fill='blue' d='"),
write(Stream, "<polygon stroke-width='1' stroke='black' fill='blue' points='"),
format(Stream, 'M ~g,~g ', [X, Y]),
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, "z'/>\n").
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, 'L ~g,~g ', [X1, Y1]),
format(Stream, ' ~g,~g', [X1, Y1]),
write_pentagon_points(Stream, Side, Angle1, X1, Y1, N1).
write_pentagon_points(Stream, Side, Angle1, X1, Y1, N1).