6

我正在尝试使用 shapely 来识别形状使用的区域以及将在 CNC 路由器上切割它的工具使用的区域。形状是使用ezdxf从 dxf 绘图中导入的。

刀具路径可以是矩形(如果它们是由沿着直线的锯盘切割的)或一组段(如果它们是由铣刀铣削的)。在这两种情况下,我都可以使用LineString.buffer()自动创建偏移量并找到工具使用的区域。

我使用 shapely 是因为我认为它是找出形状是否相互重叠的最佳工具(union()用于将所有工具合并为一个形状并overlaps()查找干扰)。请让我知道是否有更好的工具用于此目的。

buffer()在创建分段以表示拐角处的弧方面做得很好。

有没有办法创建线段来表示形状本身的弧线?

例如,如何在此形状的左侧创建弧线?我需要创建自己的(慢)python 函数吗?或者有没有优化的匀称方式?

绿色是零件,黄色是锯盘切割,洋红色是铣刀切割

4

2 回答 2

8

在 python 中创建自己的弧线方式并不一定很慢。Numpy 非常适合这些方面的操作,并且 shapely 是有意与 numpy 很好地互操作的。

例如,

import numpy as np
import shapely.geometry as geom

# Define the arc (presumably ezdxf uses a similar convention)
centerx, centery = 3, 4
radius = 2
start_angle, end_angle = 30, 56 # In degrees
numsegments = 1000

# The coordinates of the arc
theta = np.radians(np.linspace(start_angle, end_angle, numsegments))
x = centerx + radius * np.cos(theta)
y = centery + radius * np.sin(theta)

arc = geom.LineString(np.column_stack([x, y]))

在我的机器上用 1000 个点来近似开始和结束角度之间的弧大约需要 3 毫秒(这包括将其转换为匀称的 LineString)。

于 2015-06-10T16:58:16.493 回答
1

我从来没有使用过shapely,但我知道一些矢量图形原理。叠加层通常用“差异”提取。如果您将多边形的差异从联合中取出,剩下的将是您的弧。https://gis.stackexchange.com/questions/11987/polygon-overlay-with-shapely

于 2015-06-10T17:02:26.327 回答