def GISroll(): """Implements the method commercial GISsoftware uses to evaluate the slope. That is use neighboring cells in a weighted scheme""" roadwidth=4.0 alpha=atan2((p2[0]-p1[0]),(p2[1]-p1[1])) length=sqrt((p2[1]-p1[1])**2+(p2[0]-p1[0])**2) p11=getCa([-roadwidth/2,0], direction=pi/2.-alpha, origin=p1,fromLocalCart=True) p12=getCa([roadwidth/2,0], direction=pi/2.-alpha, origin=p1,fromLocalCart=True) p21=getCa([-roadwidth/2,0], direction=pi/2.-alpha, origin=p2,fromLocalCart=True) p22=getCa([roadwidth/2,0], direction=pi/2.-alpha, origin=p2,fromLocalCart=True) x1=np.linspace(p11[0], p21[0], points) x2=np.linspace(p12[0], p22[0], points) y1=np.linspace(p11[1], p21[1], points) y2=np.linspace(p12[1], p22[1], points) z1=interpol.ev(x1,y1) z2=interpol.ev(x2,y2) roll=[] for ent in range(len(z1)): if ent==0: continue elif ent==len(z1)-1: break roll.append(180*(1/pi)*atan(((z2[ent-1]+2*z2[ent]+z2[ent+1])-(z1[ent-1]+2*z1[ent]+z1[ent+1]))/(8*roadwidth/2.))) #to get the correct dimensions for plotting roll.insert(0,roll[0]) roll.insert(-1,roll[-1]) return roll,p11,p12
def naiveroll(): """plot ugly sometimes. depending on direction""" roadwidth=4.0 alpha=atan((p2[1]-p1[1])/(p2[0]-p1[0])) #this or alpha2=atan2((p2[0]-p1[0]),(p2[1]-p1[1])) #this? print 180/pi*alpha, 180/pi*alpha2 length=sqrt((p2[1]-p1[1])**2+(p2[0]-p1[0])**2) p11=getCa([-roadwidth/2,0], direction=pi/2.-alpha2, origin=p1,fromLocalCart=True) p12=getCa([roadwidth/2,0], direction=pi/2.-alpha2, origin=p1,fromLocalCart=True) p21=getCa([-roadwidth/2,0], direction=pi/2.-alpha2, origin=p2,fromLocalCart=True) p22=getCa([roadwidth/2,0], direction=pi/2.-alpha2, origin=p2,fromLocalCart=True) x1=np.linspace(p11[0], p21[0], points) x2=np.linspace(p12[0], p22[0], points) y1=np.linspace(p11[1], p21[1], points) y2=np.linspace(p12[1], p22[1], points) z1=interpol.ev(x1,y1) z2=interpol.ev(x2,y2) roll=[] for ent in range(len(z1)): roll.append(180*(1/pi)*atan((z2[ent]-z1[ent])/roadwidth)) return roll, p11, p12