如何在shapely(或更好的库)中创建带有圆弧的多边形

2024-06-12 21:06:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我使用shapely是因为我认为它是最好的工具来找出形状是否相互重叠(使用^{}将所有工具合并为一个形状,^{}来查找干涉)。请告诉我是否有更好的工具来达到这个目的。在

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

有没有一种方法可以创建段来表示形状本身的圆弧?在

例如,如何在该形状的左侧创建圆弧?我需要创建自己的(慢)python函数吗?或者有没有一种优化的整形方法?在

Green is the part, yellow are the saw disk cuts, magenta are the milling bit cuts


Tags: 工具方法图形区域dxf轨迹buffer路由器
2条回答

用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毫秒(这包括将其转换为一个形状良好的线串)。在

我从来没有用过shapely,但我知道一些矢量图形原理。叠加通常用“差分”来提取。如果你把多边形的差从并集中去掉,剩下的就是你的弧。https://gis.stackexchange.com/questions/11987/polygon-overlay-with-shapely

相关问题 更多 >