Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,30 @@
|
|||
sierpinski(N) :-
|
||||
sformat(A, 'Sierpinski order ~w', [N]),
|
||||
new(D, picture(A)),
|
||||
draw_Sierpinski(D, N, point(350,50), 600),
|
||||
send(D, size, size(690,690)),
|
||||
send(D, open).
|
||||
|
||||
draw_Sierpinski(Window, 1, point(X, Y), Len) :-
|
||||
X1 is X - round(Len/2),
|
||||
X2 is X + round(Len/2),
|
||||
Y1 is Y + Len * sqrt(3) / 2,
|
||||
send(Window, display, new(Pa, path)),
|
||||
(
|
||||
send(Pa, append, point(X, Y)),
|
||||
send(Pa, append, point(X1, Y1)),
|
||||
send(Pa, append, point(X2, Y1)),
|
||||
send(Pa, closed, @on),
|
||||
send(Pa, fill_pattern, colour(@default, 0, 0, 0))
|
||||
).
|
||||
|
||||
|
||||
draw_Sierpinski(Window, N, point(X, Y), Len) :-
|
||||
Len1 is round(Len/2),
|
||||
X1 is X - round(Len/4),
|
||||
X2 is X + round(Len/4),
|
||||
Y1 is Y + Len * sqrt(3) / 4,
|
||||
N1 is N - 1,
|
||||
draw_Sierpinski(Window, N1, point(X, Y), Len1),
|
||||
draw_Sierpinski(Window, N1, point(X1, Y1), Len1),
|
||||
draw_Sierpinski(Window, N1, point(X2, Y1), Len1).
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
:- dynamic top/1.
|
||||
|
||||
sierpinski_iterate(N) :-
|
||||
retractall(top(_)),
|
||||
sformat(A, 'Sierpinski order ~w', [N]),
|
||||
new(D, picture(A)),
|
||||
draw_Sierpinski_iterate(D, N, point(550, 50)),
|
||||
send(D, open).
|
||||
|
||||
draw_Sierpinski_iterate(Window, N, point(X,Y)) :-
|
||||
assert(top([point(X,Y)])),
|
||||
NbTours is 2 ** (N - 1),
|
||||
% Size is given here to preserve the "small" triangles when N is big
|
||||
Len is 10,
|
||||
forall(between(1, NbTours, _I),
|
||||
( retract(top(Lst)),
|
||||
assert(top([])),
|
||||
forall(member(P, Lst),
|
||||
draw_Sierpinski(Window, P, Len)))).
|
||||
|
||||
draw_Sierpinski(Window, point(X, Y), Len) :-
|
||||
X1 is X - round(Len/2),
|
||||
X2 is X + round(Len/2),
|
||||
Y1 is Y + round(Len * sqrt(3) / 2),
|
||||
send(Window, display, new(Pa, path)),
|
||||
(
|
||||
send(Pa, append, point(X, Y)),
|
||||
send(Pa, append, point(X1, Y1)),
|
||||
send(Pa, append, point(X2, Y1)),
|
||||
send(Pa, closed, @on),
|
||||
send(Pa, fill_pattern, colour(@default, 0, 0, 0))
|
||||
),
|
||||
retract(top(Lst)),
|
||||
( member(point(X1, Y1), Lst) -> select(point(X1,Y1), Lst, Lst1)
|
||||
; Lst1 = [point(X1, Y1)|Lst]),
|
||||
|
||||
( member(point(X2, Y1), Lst1) -> select(point(X2,Y1), Lst1, Lst2)
|
||||
; Lst2 = [point(X2, Y1)|Lst1]),
|
||||
|
||||
assert(top(Lst2)).
|
||||
Loading…
Add table
Add a link
Reference in a new issue