def Rotx(l,rot):
xr = [0*np.cos(rot)-0*np.sin(rot),(l[0])*np.cos(rot)-0*np.sin(rot),(x)*np.cos(rot)-y*np.sin(rot)]
return xr
def Roty(l,rot):
yr=[0*np.sin(rot)+0*np.cos(rot),(l[0])*np.sin(rot)+0*np.cos(rot),(x)*np.sin(rot)+y*np.cos(rot)]
return yr
fig = plt1.figure(figsize=(9,9), constrained_layout=True)
widths = [2,7]
heights = [2,7]
gs=fig.add_gridspec(2,2,width_ratios=widths, height_ratios=heights, wspace=0.05)
ax1=fig.add_subplot(gs[0:,0:])
ax2=fig.add_subplot(gs[0,0])
p= np.loadtxt("Primetable.txt", delimiter=",", unpack=False)
counter=np.arange(1,len(p)+1)
ax1.clear()
ax2.clear()
#Set the number of fibonacci triangles to display
q=56
t=56
q=56
t=106
colori=1
while q <= t:
#n=q**2
n=q
tempcount=np.arange(1,n)
total=len(tempcount)+1
ax1.clear()
ax2.clear()
plt1.gca().set_prop_cycle(None)
rot=0
rot0=np.pi
x0=[0,0,0]
y0=[0,0,0]
#Counter for mean graph scaling
m=0
for i in tempcount:
#Select 3 following primes, check if hypothenusa is smaller sum sides
l=[p[i-1],p[i],p[i+1]]
if (p[i+1]>(p[i-1]+p[i])):
continue
l=[p[i-1],p[i-1+26],p[i-1+67]]
if ((p[i-1+67])>(p[i-1]+p[i-1+26])):
continue
#Determine triangle charesteristics (cosine rule)
alpha=np.arccos((l[1]**2+l[2]**2-l[0]**2)/(2*l[1]*l[2]))
beta=np.arccos((l[0]**2+l[2]**2-l[1]**2)/(2*l[0]*l[2]))
gamma=np.arccos((l[0]**2+l[1]**2-l[2]**2)/(2*l[0]*l[1]))
#Height Fibonacci Prime Triangle
x=l[0]+l[1]*np.cos(np.pi-gamma)
y=l[2]*np.cos(np.pi/2-beta)
#Apply Rotation
rot=rot+np.pi-rot0
rot0=gamma
xr=Rotx(l,rot)
yr=Roty(l,rot)
#Triangle not translation
xr =xr+x0
yr =yr+y0
x0=x*np.cos(rot)-y*np.sin(rot)+x0
y0=x*np.sin(rot)+y*np.cos(rot)+y0
#Plot triangles and color
color=str(i/(n+55))
ax1.fill(xr,yr,zorder=(-i),c=color)
r=np.sqrt(((xr[0]+xr[1]+xr[2])/3)**2+((yr[0]+yr[1]+yr[2])/3)**2)
m=m+r
q=q+1
#Plot last triangle and scale the plot
ax1.axis([-5*m/total,5*m/total, -5*m/total,5*m/total])
ax1.plot([xr[0],xr[1],xr[2],xr[0]],[yr[0],yr[1],yr[2],yr[0]],zorder=(0),c='blue',linewidth='0.6')
ax1.axes.get_xaxis().set_visible(False)
ax1.axes.get_yaxis().set_visible(False)
#Draw reference triangle
c=l[0]+l[1]+l[2]
ax2.fill([0,l[0]/c,x/c],[0,0,y/c],c='0.75')
ax2.plot([0,1/3,0.5/3,0],[0,0,0.5*np.sqrt(3)/3,0],zorder=(5),c='red',linewidth='0.6')
area=0.5*l[2]*l[0]*np.sin(beta)/c**2
areaequi=0.5*1/3*np.sqrt(3)/6
ratio=area/areaequi
ax2.axis([-0.05,0.45,-0.05,0.45])
ax2.axis([-0.05,0.45,-0.05,0.45])
ax2.text(0.05,0.95, 'Prime Triangle: [' +str(l[0]) +', '+ str(l[1]) +', '+ str(l[2]) + '] \nEquilateral Triangle Fit: ' + str(round(ratio,8)) +'.', transform=ax2.transAxes, fontsize=10,
verticalalignment='top')
ax2.axes.get_xaxis().set_visible(False)
ax2.axes.get_yaxis().set_visible(False)
ax2.axis('off')
plt1.show()
plt1.savefig('Fibonacci Prime Triangle n=' + str(n), dpi=500, bbox_inches='tight')