def winding_angle(self, path, point):
wa = 0
for i in range(len(path)-1):
p = np.array([path[i].x, path[i].y])
pn = np.array([path[i+1].x, path[i+1].y])
vp = p - point
vpn = pn - point
vp_norm = sqrt(vp[0]**2 + vp[1]**2)
vpn_norm = sqrt(vpn[0]**2 + vpn[1]**2)
assert (vp_norm > 0)
assert (vpn_norm > 0)
z = np.cross(vp, vpn)/(vp_norm * vpn_norm)
z = min(max(z, -1.0), 1.0)
wa += asin(z)
return wa
评论列表
文章目录