⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sierpinski.pl

📁 PRl教学程序 PRl教学程序 PRl教学程序
💻 PL
字号:
/********************************************************************
    Constraint-based Graphical Programming in B-Prolog
    %
    draw Sierpinski's triangles
*********************************************************************/
go:-
   sierpinski(Os),
   cgJava(sierpinski,Os).

sierpinski([T|Ts]):-
   cgSquare(S), S^fill #= 0,
   cgTriangle(T), T^fill #= 0,
   cutSquare(S,T),
   cgPack([S,T]),
   divideTriangle(T,5,Ts,[]).

cutSquare(S,T):-
   T^point1 #= S^leftTopPoint,
   T^point2 #= S^leftBottomPoint,
   T^point3 #= S^rightBottomPoint.

divideTriangle(T,N,Ts,TsR):-N=:=0,!,Ts=TsR.
divideTriangle(T,N,Ts,TsR):-
   Ts=[T1,T2,T3|Ts1],
   P1 #= T^point1, P2 #= T^point2, P3 #= T^point3,
   %%
   cgTriangle(T1),T1^fill #= 0,
   T1^point1 #= P1, center(T1^point2,P1,P2), center(T1^point3,P1,P3),
   %%
   cgTriangle(T2), T2^fill #= 0,
   center(T2^point1,P1,P2), T2^point2 #= P2, center(T2^point3,P2,P3),
   %%
   cgTriangle(T3), T3^fill #= 0,
   center(T3^point1,P1,P3), center(T3^point2,P2,P3), T3^point3 #= P3,
   %%
   N1 is N-1,
   cgPack([T1,T2,T3]),
   divideTriangle(T1,N1,Ts1,Ts2),
   divideTriangle(T2,N1,Ts2,Ts3),
   divideTriangle(T3,N1,Ts3,TsR).

center(CP,P1,P2):-
   CP^x #= (P1^x+P2^x)//2,
   CP^y #= (P1^y+P2^y)//2.




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -