如何以匀称的方式(或更好的库)创建带弧的多边形

How to create polygons with arcs in shapely (or a better library)

我正在尝试使用 shapely 来识别形状使用的区域以及将在 CNC 路由器上切割它的工具使用的区域。使用 ezdxf.

从 dxf 绘图导入形状

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

我使用 shapely 是因为我认为它是查明形状是否相互重叠的最佳工具(使用 union() to merge all the tools into one shape and overlaps() 找出干扰)。如果有更好的工具,请告诉我。

buffer() 在创建线段以表示角上的圆弧方面做得很好。

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

例如,如何在这个形状的左侧创建圆弧?我需要创建自己的(慢)python 函数吗?或者有优化的shapely方式吗?

在 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)。

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