<Text-field style="Heading 1" layout="Heading 1">Functions to draw Procedure Line and Approval Voting Region</Text-field> restart:with(plots):with(geometry): plur:= (a,b,c,d,e,f) -> [ (a+b)/(a+b+c+d+e+f), (e+f)/(a+b+c+d+e+f), (c+d)/(a+b+c+d+e+f)]: aplur:= (a,b,c,d,e,f) -> [ (a+b+c+f)/(2*(a+b+c+d+e+f)), (e+f+a+d)/(2*(a+b+c+d+e+f)), (c+d+b+e)/(2*(a+b+c+d+e+f))]: prdown := (a,b,c) -> [ -a/sqrt(2) + b/sqrt(2), -a/sqrt(6)-b/sqrt(6)+sqrt(2/3)*c]: prup := (x,y) -> [-1/2*sqrt(2)*x-1/6*sqrt(6)*y+1/3, 1/2*sqrt(2)*x-1/6*sqrt(6)*y+1/3, 1/3+1/3*sqrt(6)*y]: tri:=spacecurve({[ [1,0,0],[0,1,0],[0,0,1],[1,0,0]], [ [1,0,0],[0,1/2,1/2]], [ [0,1,0],[1/2,0,1/2]], [ [0,0,1],[1/2,1/2,0]]},color=black,scaling=constrained): procline:=(a,b,c,d,e,f) -> spacecurve({[ plur(a,b,c,d,e,f), aplur(a,b,c,d,e,f)]}, color=blue,thickness=2, axes=none,style=line): procpoints:=(a,b,c,d,e,f) -> spacecurve({[ plur(a,b,c,d,e,f), aplur(a,b,c,d,e,f)]}, color=green, axes=none,style=point, symbolsize=15, symbol=CIRCLE): normalize := pnt -> ( pnt[1]/(pnt[1]+pnt[2]+pnt[3]), pnt[2]/(pnt[1]+pnt[2]+pnt[3]), pnt[3]/(pnt[1]+pnt[2]+pnt[3])): apvertices := proc(a,b,c,d,e,f) local A,B,C,D,E,F,G,H, prof, i, po, apo,CH,L; prof:=(a,b,c,d,e,f); po:= [a+b, e+f, c+d]; apo:= [a+b+c+f, e+f+a+d, c+d+b+e]; point(A, prdown(normalize([po[1],po[2],po[3]]) )); point(B, prdown(normalize([po[1],po[2],apo[3]]) )); point(C, prdown(normalize([po[1],apo[2],po[3]]) )); point(D, prdown(normalize([po[1],apo[2],apo[3]]) )); point(E, prdown(normalize([apo[1],po[2],po[3]]) )); point(F, prdown(normalize([apo[1],po[2],apo[3]]) )); point(G, prdown(normalize([apo[1],apo[2],po[3]]) )); point(H, prdown(normalize([apo[1],apo[2],apo[3]]) )); CH:=convexhull({A,B,C,D,E,F,G,H}); L:=[]: for i from 1 to nops(CH) do L:=[op(L), prup(op(coordinates(CH[i])))]: od: L:=[op(L),L[1]]: return(spacecurve(L,color=red,axes=none)); end proc: plotprofile := (a,b,c,d,e,f) -> display(tri, procline(a,b,c,d,e,f), procpoints(a,b,c,d,e,f), apvertices(a,b,c,d,e,f) ):
plotprofile(10,0,6,6,3,6);