评论
在 bpath.py 第 644 行,似乎没问题 class Segment:
...
...
# ----------------------------------------------------------------------
# Return minimum distance of P from segment
# ----------------------------------------------------------------------
def distance(self, P):
if self.type == Segment.LINE:
AB2 = self.AB[0] ** 2 + self.AB[1] ** 2
APx = P[0] - self.A[0]
APy = P[1] - self.A[1]
if abs(AB2) < EPS:
return sqrt(APx**2 + APy**2)
dot = APx * self.AB[0] + APy * self.AB[1]
proj = dot / AB2
if proj < 0.0:
return sqrt(APx**2 + APy**2)
elif proj > 1.0:
return sqrt((P[0] - self.B[0]) ** 2 + (P[1] - self.B[1]) ** 2)
else:
d = (APx**2 + APy**2) - dot * proj
if abs(d) < EPS:
return 0.0
return sqrt(d)
elif self.type == Segment.CW:
PCx = P[0] - self.C[0]
PCy = P[1] - self.C[1]
phi = atan2(PCy, PCx)
if phi < self.endPhi - EPS / self.radius:
phi += PI2
if phi > self.startPhi + EPS / self.radius:
return sqrt((P[0] - self.A[0]) ** 2 + (P[1] - self.A[1]) ** 2)
else:
return abs(sqrt(PCx**2 + PCy**2) - self.radius)
elif self.type == Segment.CCW:
PCx = P[0] - self.C[0]
PCy = P[1] - self.C[1]
phi = atan2(PCy, PCx)
if phi < self.startPhi - EPS / self.radius:
phi += PI2
if phi > self.endPhi + EPS / self.radius:
return sqrt((P[0] - self.B[0]) ** 2 + (P[1] - self.B[1]) ** 2)
else:
return abs(sqrt(PCx**2 + PCy**2) - self.radius)
|
我会错吗?
CW 和 CCW 的 distance (self,P) 生成到点的错误距离:它作为矢量计算 A 或 B 的参考。