Functions to draw Procedure Line and Approval Voting Region
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);