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

📄 circlechart.pl

📁 PRl教学程序 PRl教学程序 PRl教学程序
💻 PL
字号:
/********************************************************************
    Constraint-based Graphical Programming in B-Prolog
    %
    draw a circle chart based on input data
*********************************************************************/
go:-
    circleChart(Os),
    cgJava(circleChart,Os).

circleChart(Os):-
    Arcs = [A1,A2,A3,A4],
    cgArcs(Arcs),

    A1^color #= red, Ang1 is (20*360)//100, A1^arcAngle #= Ang1,
    A2^color #= blue,  Ang2 is (40*360)//100, A2^arcAngle #= Ang2,
    A3^color #= yellow, Ang3 is (32*360)//100, A3^arcAngle #= Ang3,
    A4^color #= green, Ang4 is 360-Ang1-Ang2-Ang3, A4^arcAngle #= Ang4,
    %
    Labels = [L1,L2,L3,L4],
    cgLabels(Labels),
    L1^text #= 'Apple',
    L2^text #= 'Orange',
    L3^text #= 'Banana',
    L4^text #= 'Other',
    %
    Squares = [S1,S2,S3,S4],
    cgSquares(Squares),
    cgSame(Squares,width,20), % all squares are 20 pixles wide
    %
    constrainColor(Squares,Arcs),
    cgLeft(Arcs,Squares),
    %
    cgTable([[S1,L1],
	     [S2,L2],
	     [S3,L3],
	     [S4,L4]],2,2),

    arcsNotOverlap(Arcs),
    %
    Os=[A1,A2,A3,A4,L1,L2,L3,L4,S1,S2,S3,S4].
     
constrainColor([],[]).
constrainColor([Sq|Sqs],[A|As]):-
    Sq^color #= A^color,
    constrainColor(Sqs,As).

arcsNotOverlap([]):-!.
arcsNotOverlap([_Arc]):-!.
arcsNotOverlap([Arc|Arcs]):-
    arcsNotOverlap(Arc,Arcs),
    arcsNotOverlap(Arcs).
    
arcsNotOverlap(_Arc1,[]).
arcsNotOverlap(Arc1,[Arc|Arcs]):-
    (Arc1^startAngle #>= Arc^startAngle+Arc^arcAngle) #\/
     (Arc1^startAngle+Arc1^arcAngle #=< Arc^startAngle),
     arcsNotOverlap(Arc1,Arcs).
		

⌨️ 快捷键说明

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