开源改变世界

计算弧到点的最小距离时出错 #1806

推推 grbl 3年前 (2023-02-03) 209次浏览
打开
MARIOBASZ 打开了这个问题 上星期 · 2 条评论
打开

计算弧到点的最小距离时出错#1806

MARIOBASZ 打开了这个问题 上星期 · 2 条评论

评论

计算弧到点的最小距离时出错 #1806
贡献者
马里奥巴斯 评论了 上星期  

我会错吗?
CW 和 CCW 的 distance (self,P) 生成到点的错误距离:它作为矢量计算 A 或 B 的参考。

计算弧到点的最小距离时出错 #1806
贡献者
小皮埃尔 评论了 5天前

在 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)
计算弧到点的最小距离时出错 #1806
贡献者作者
马里奥巴斯 评论了 4天前  

你好皮埃尔。
她画了一条弧线。测量到点 (0.0, 0.0) 的距离给了我错误的距离:起点或终点,取决于它是顺时针还是逆时针。如果它线性化,它会生成正确的结果。
我正在制作一个骨架插件,我的直觉是我可以从那里生成一个自适应口袋(获得的每个点必须具有最小可用空间信息)

免费注册 在 GitHub 上加入此对话。已有帐户? 登录评论
标签
还没有
项目

还没有

发展

没有分支机构或拉取请求

2名参加者
计算弧到点的最小距离时出错 #1806计算弧到点的最小距离时出错 #1806

喜欢 (0)