我正在尝试使用匀称来识别形状所使用的区域以及将在CNC路由器上切割它的工具所使用的区域。使用ezdxf从dxf图形导入形状。
刀具路径可以是矩形(如果它们由沿直线的锯片切割)或一组段(如果它们由铣削刀头布线)。在这两种情况下,我都可以使用LineString.buffer()自动创建偏移并找到工具使用的区域。
我使用的形状因为我认为这是最好的工具,可以找出形状是否相互重叠(使用union()
将所有工具合并为一个形状,overlaps()
找到干扰) 。如果有更好的工具用于此目的,请告诉我。
buffer()
在创建分段以表示角落弧线方面做得很好。
有没有办法创建分段来表示形状本身的弧?
例如,如何在此形状的左侧创建圆弧?我需要创建自己的(慢)python函数吗?还是有一种优化的匀称方式?
答案 0 :(得分:5)
在python中创建自己的弧形方式并不一定很慢。 Numpy非常适合沿着这些线路进行操作,并且有意识地与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)。
答案 1 :(得分:1)
我从未使用过匀称,但我知道一些矢量图形原理。叠加通常用“差异”提取。如果你将多边形的差异从联合中取出,则剩余的将是你的弧。 https://gis.stackexchange.com/questions/11987/polygon-overlay-with-shapely