Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Project: amplituhedron
Views: 71
var("a b c d") A=a^(sqrt(5)); B=b^(sqrt(5)+1); C=c^(sqrt(5)-1); D=d^(sqrt(5)); aa=(1+sqrt(5))/2; grPt=Matrix([[1+A+B,aa-A/aa-B*aa,aa-A/aa+B*aa,1+A-B], [1+C+D,1/aa-C/aa+aa*D,-1/aa-C/aa+aa*D,-1+C-D]]); i0=0; j0=2; minors={}; for i in range(4): for j in range(i+1,4): minor=-grPt.matrix_from_columns([i,j]).det() minors[(i,j)]=minor; def is_tp(nA,nB,nC,nD): subsDict={a:nA,b:nB,c:nC,d:nD}; for i in range(4): for j in range(i+1,4): if (minors[(i,j)](subsDict).n()<0.05): return False; return True; def subs_dict(lst): return {a:lst[0],b:lst[1],c:lst[2],d:lst[3]}; def is_tp_list(lst): return is_tnn(lst[0],lst[1],lst[2],lst[3]); def print_minors(nA,nB,nC,nD): subsDict={a:nA,b:nB,c:nC,d:nD}; for i in range(4): for j in range(i+1,4): print(i+1,j+1,minors[(i,j)](subsDict).n()); def find_max_tp_multiple(na,nb,nc,nd): iter=10; inside=[0.0000001,0.0000001,0.0000001,0.0000001]; iters_used=0; for i in range(1,iter): iters_used=i; if (not is_tp(na*i,nb*i,nc*i,nd*i)): outside=[na*i,nb*i,nc*i,nd*i]; break; midpt=[0]*4; for i in range(iter): midpt=[0.5*(inside[j]+outside[j]) for j in range(4)]; if (is_tp_list(midpt)): inside=midpt; else: outside=midpt; return inside; def draw_line_segment(a1,b1,c1,d1,a2,b2,c2,d2): #plot the minors along the line segment connecting the point a1,b1,c1,d1 with a2,b2,c2,d2 midpt1=find_max_tp_multiple(a1,b1,c1,d1); midpt2=find_max_tp_multiple(a2,b2,c2,d2); print("(a1,b1,c1,d1="+str(midpt1)+"; minors: "+str([str(i+1)+","+str(j+1)+": " +str(minors[(i,j)](subs_dict(midpt1)).n()) for i in range(4) for j in range(i+1,4)])); print("(a2,b2,c2,d2="+str(midpt2)+"; minors: "+str([str(i+1)+","+str(j+1)+": " +str(minors[(i,j)](subs_dict(midpt2)).n()) for i in range(4) for j in range(i+1,4)])); var("t"); subsDict=subs_dict([midpt1[j]*(1-t)+midpt2[j]*t for j in range(4)]); clrs=["red","green","blue","cyan","pink","magenta","orange","brown"]; clr_cnt=0; tMax=1; P=list_plot([]); N=100; for i in range(4): for j in range(i+1,4): P=P+list_plot([minors[(i,j)](subsDict)({t:tt}).n() for tt in [x/N for x in range(tMax*N)]], color=clrs[clr_cnt]); P=P+text(str((i+1,j+1)),(N*(tMax+0.01),minors[(i,j)](subsDict)({t:tMax}).n()),color=clrs[clr_cnt]); clr_cnt+=1; P.show() print("init ok!")
(a, b, c, d) init ok!
draw_line_segment(1,1,1,1,2,0.2,2,0.2);
(a1,b1,c1,d1=[0.700195342480469, 0.700195342480469, 0.700195342480469, 0.700195342480469]; minors: ['1,2: 0.0588862475556478', '1,3: 4.38108833172977', '1,4: 3.80285019133871', '2,3: 1.99417542358665', '2,4: 1.74666985491751', '3,4: 1.16775193645718'] (a2,b2,c2,d2=[0.421875078906250, 0.0421875789062500, 0.421875078906250, 0.0421875789062500]; minors: ['1,2: 1.58965219110215', '1,3: 3.00536252902868', '1,4: 2.29225211926952', '2,3: 1.88907342733566', '2,4: 1.46940474368625', '3,4: 0.0540126889808601']