# base-2 # lp=lista di punti, ad es. lp=[[0,0],[1,3],...]. def Cerchi (lp,raggi,riempi=r.NA,colore='black',spessore=0.5,tratto=1): for (x,y) in lp: r.symbols(x,y,circles=raggi,add=1,inches=0, bg=riempi,fg=colore,lwd=spessore,lty=tratto) def Curva (f,g,t1=0,t2=1,n=200,spessore=0.5,tratto=1,colore='black',dh=0,dv=0): intt=Intervallo(t1,t2,n=n) r.lines([f(t)+dh for t in intt],[g(t)+dv for t in intt], lwd=spessore,lty=tratto,col=colore) def Freccia (A,B,punta=0.2,spessore=0.5,nelmezzo=0,tratto=1,d1=0,d2=0): (x1,y1)=A; (x2,y2)=B; z1=complex(x1,y1); z2=complex(x2,y2); d=r.abs(z1-z2) p1=z1+(d1/d)*(z2-z1); p2=z1+((d-d2)/d)*(z2-z1) A=[r.Re(p1),r.Im(p1)]; B=[r.Re(p2),r.Im(p2)]; (x1,y1)=A; (x2,y2)=B if nelmezzo: Retta(A,B,spessore=spessore,tratto=tratto); x2=x1+0.6*(x2-x1); y2=y1+0.6*(y2-y1) r.arrows(x1,y1,x2,y2,lwd=spessore,length=punta/2.54,angle=20,lty=tratto) # Grafico di una funzione. [x1,x2]=intervallo degli x. # s=sinistra del rettangolo, a=alto ecc. # dh=spostamento a destra, dv=spostamento in alto. # Quando ra==1, la figura viene incorniciata da un rettangolo. def Grafico (f,x1=0,x2=1,s=None,d=None,a=None,b=None, n=200,ra=1,spessore=0.5,tratto=1,colore='black',dh=0,dv=0): intx=Intervallo(x1,x2,n=n) r.lines([x+dh for x in intx],[f(x)+dv for x in intx], lwd=spessore,lty=tratto,col=colore) if ra: if s==None: s=x1 if d==None: d=x2 if a==None: a=1 if b==None: b=0 r.rect(s+dh,b+dv,d+dh,a+dv,lwd=0.2) # Suddivisione di [a,b] in n sottointervalli; # si ottiene una lista con n+1 valori. def Intervallo (a,b,n=200): return r.seq(a,b,length=n) def Poligono (lp,chiuso=0,riempi=r.NA,colore='black', densita=None,inclinazione=0,spessore=0.5,tratto=1): lx=[p[0] for p in lp]; ly=[p[1] for p in lp] if chiuso: if densita==None: r.polygon(lx,ly,lwd=spessore,col=riempi,border=colore) else: r.polygon(lx,ly,lwd=spessore,border=colore, density=densita,angle=inclinazione,lty=tratto) else: r.lines(lx,ly,lwd=spessore,col=colore,lty=tratto) # Retta in RPY. Per rette orizzonali e verticali # si puo' anche usare abline. def Retta (A,B,spessore=0.5,tratto=1): (x,y)=zip(A,B); r.lines(x,y,lwd=spessore,lty=tratto) # Rettangolo parallelo agli assi in RPY. def Rettangolo (x,y,larghezza,altezza,spessore=0.5,tratto=1): r.rect(x,y,x+larghezza,y+altezza,lwd=spessore,lty=tratto) def Testo (x,y,testo,p=0.5,pos=4,centrato=1,dist=0.5,mat=0): if mat: vfont=None; testo=r.parse(text=testo) else: vfont=['serif','italic'] if centrato: r.text(x,y,testo,offset=dist,vfont=vfont,cex=p) else: r.text(x,y,testo,pos=pos,offset=dist,vfont=vfont,cex=p)