Next Up Previous Hi Index

Python: Funzioni di Fresnel applicate alle Clotoidi

Questa è un'applicazione che mostra la versatilità di Python anche senza l'utilizzo della precisione multipla. Lo sviluppo in serie di potenze delle funzioni di Fresnel trovano larga applicazione nel tracciamento delle spirali di raccordo di curve stradali, le clotoidi.
Ecco le formule:

 clothoid coordinates

E qui appresso il codice .py di un esempio

# ------ clot.py --------- 22-Apr-2017 ------------
# --- Fresnel functions C(theta), S(theta) ---------
# ----------- clothoid coordinates ----------
import math
def myC(n,theta):
  somma1=0	
  for i in range (n):
   somma1 += pow(theta,(2*i)) * pow((-1),i)/(math.factorial(2*i)*(4*i+1))
  return somma1 

def myS(n,theta):
  somma2=0	
  for i in range (n):
   somma2 += pow(theta,(2*i+1)) * pow((-1),i)/(math.factorial(2*i+1)*(4*i+3))
  return somma2
#---------------------------------
ls=100.0 
rs=400.0 # Given data at the end point P: L=100m, R=400m 
       # L= curve lenght, R= radius of curvature in P 
a= math.sqrt(ls*rs) # a= constant= sqrt(R*L)

NP=10    # lenght L divided in n parts  
dx=ls/NP # lenght of each piece 
#
for j in range (NP+1): 
 li= j*dx 
 t=li**2/(2*a**2) # Deviation angle: theta= l^2/(2*a^2) 
 x=li*myC(4,t)
 y=li*myS(4,t)
 print (" j= ",format(j,'02d')," li= ",format(li,'8.3f')," t=",format(t*180/math.pi,'8.5f'),"gr  x-clot= ", format(x,'8.5f')," y-clot= ", format(y,'7.5f'))
# ---------------------------------------
print("")
print (" L= ", format(ls,'.3f')," m")
print (" R= ", format(rs,'.3f')," m")
print (" a= ", format( a,'.3f')," m [a=sqrt(L*R)]")
# ---------------------------------------
# ---------- EOF: clot.py ---------
# --- OUTPUT --------
# j=  00  li=     0.000  t=  0.00000 gr  x-clot=   0.00000  y-clot=  0.00000
# j=  01  li=    10.000  t=  0.07162 gr  x-clot=  10.00000  y-clot=  0.00417
# j=  02  li=    20.000  t=  0.28648 gr  x-clot=  19.99995  y-clot=  0.03333
# j=  03  li=    30.000  t=  0.64458 gr  x-clot=  29.99962  y-clot=  0.11250
# j=  04  li=    40.000  t=  1.14592 gr  x-clot=  39.99840  y-clot=  0.26666
# j=  05  li=    50.000  t=  1.79049 gr  x-clot=  49.99512  y-clot=  0.52080
# j=  06  li=    60.000  t=  2.57831 gr  x-clot=  59.98785  y-clot=  0.89987
# j=  07  li=    70.000  t=  3.50937 gr  x-clot=  69.97374  y-clot=  1.42878
# j=  08  li=    80.000  t=  4.58366 gr  x-clot=  79.94882  y-clot=  2.13236
# j=  09  li=    90.000  t=  5.80120 gr  x-clot=  89.90778  y-clot=  3.03528
# j=  10  li=   100.000  t=  7.16197 gr  x-clot=  99.84386  y-clot=  4.16202
#
# L=  100.000  m
# R=  400.000  m
# a=  200.000  m [a=sqrt(L*R)]
# -----------------

Next Up Previous Hi Index