我正在寻找一种算法,可以在表面上找到不规则的形状,也许不太不规则,比如压扁的圆,并在该形状周围追踪最多有 n 条边的多边形。 “n”最大值可能基于形状的面积。
最佳答案
我会这样做:
计算切线角
ang
及其变化dang
对于所有曲线段您可以使用atanxy或
atan2
为此ang[i] = atanxy(x[i]-x[i-1],y[i]-y[i-1]); dang[i] = ang[i]-ang[i-1];
找到拐点(黑色)
在这些点上的符号为
dang
正在改变dang[i-1]*dang[i+1]<0.0
但是你需要处理
dang=0.0
正确地扫描元素(需要在它们之前和之后扫描)。这些点将成为输出多边形的基本骨架添加凹凸最大点数(绿色)
在这些点处,切线角位于最近的拐点之间,以便找到两个拐点之间的最大点
i0
和i1
找到最接近的角度angavg=0.5*(ang[i0]+ang[i1])
别忘了
|ang[i]-angavg|<=PI
所以
+/- 2.0*PI
如果这不是真的现在您应该拥有闭合多重曲线的所有重要点...
它应该看起来像这样:
CW/CCW或红/蓝仅代表
dang[i]
的符号...
[注释]
应保留输出点类型(inflex/maxpoint),因为它可以稍后用于形状的比较和检测...
关于algorithm - 将形状描画为最大 n 条边的多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26297677/