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):
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!")