如何以匀称的方式(或更好的库)创建带弧的多边形
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
我正在尝试使用 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