如何创建具有弧形的多边形(或更好的库)

ste*_*nci 5 python shapely

我正在尝试使用匀称来识别形状所使用的区域以及将在CNC路由器上切割它的工具所使用的区域.使用ezdxf从dxf图形导入形状.

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

我使用的形状很合理,因为我认为它是最好的工具,可以找出形状是否相互重叠(使用union()将所有工具合并为一个形状并overlaps()找到干涉).如果有更好的工具用于此目的,请告诉我.

buffer() 在创建用于表示角落弧线的线段方面做得很好.

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

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

绿色是部分,黄色是锯片切割,洋红色是铣削钻头切割

Joe*_*ton 6

用python创建自己的弧形方法不一定很慢。Numpy非常适合沿着这些路线进行操作,并且Shape旨在与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]))
Run Code Online (Sandbox Code Playgroud)

在我的机器上,用起始角度和结束角度之间的1000个点近似圆弧大约需要3毫秒(包括将其转换为整齐的LineString)。