0

一种称为“gcode”的语法用于告诉 CNC 雕刻机如何移动。gcode的一个例子如下:

G00 Z1 F800 (lift z axis by 1mm)
G00 X49.546785 Y-11.48703 F800 (Go to these coordinates at 800mm/m)
G01 Z-0.35 F100 (Penetrate. Lower the tool into the work by 0.35mm)
G03 X49.126859 Y-11.464812 I-0.385599 J-3.308393 F80 (cut an anticlockwise arc at 80mm/m)
(arc ends at X,Y, arc centre is x+i, y+j)
etc.

如您所见,我们可以从 x、y 和 z 平面中的坐标以直线 (G0,G1) 和圆弧 (G2,G3) 描述工具的移动。使用这种机制,我们可以绘制(雕刻)路径,通常它们是闭合路径,如下所示:

在此处输入图像描述

在这张图片中,我们看到一条黑色的封闭路径(字母 a)。绿色轮廓是相同的路径但“向上缩放”,红色路径是相同的路径但向下缩放。在 Inkscape 中,我们可以使用“动态偏移”工具来做到这一点。

我正在寻找一种算法,我可以将其应用于 gcode(如上所述)以按所述缩放路径。我的第一个想法是从字面上只缩放每一行和 arc :

假设我们按 'n'% 缩放 本质上,我们会让每条线长 n%,每条弧长 n%。但是最终的路径会以什么为中心呢?

有谁知道这个算法的名称,或者有任何链接或示例说明如何在 SVG 或任何其他基于坐标的系统中实现这一点(如果可能的话,最好在 python 中)。

附录:

向内和向外缩放多边形的过程主要有两个不同的名称:“膨胀”和“偏移”。

请参阅此处以获取此问题的近似答案

4

1 回答 1

0

正如评论中给出的,DilationErosionOpeningClosing标准的形态学操作。事实上,维基百科上的图片提供的细节与你所拥有的非常相似。

膨胀/侵蚀 公共领域图片

不同之处在于对象的内部包含在膨胀和腐蚀中。只需改变结构元素的大小,您就可以减去图像以获得您想要的痕迹。

腐蚀和膨胀是更简单的形态学形式,所以先看一下那些以了解算法。它们在具有 Python 绑定的 OpenCV 中实现;但是,它们的编码相当简单。

也许可以使用 XOR 来获得轮廓而无需图像减法。但只是打开和关闭的周边是我认为你正在寻找的轮廓。膨胀和腐蚀会给出稍微不同的路径。您也可以使用Voronoi分区,这是一种最原始的形式。主要区别在于如何处理拐角和其他连接点。

于 2022-01-14T15:25:44.030 回答