将形状追踪到最多n个边的多边形

时间:2014-10-10 10:48:07

标签: algorithm geometry

我正在寻找一种算法,该算法会在表面上找到不规则的形状,可能不是太不规则,如一个压扁的圆,并且在形状周围跟踪最多n个边的多边形。 ' n'最大值可能基于形状的区域。

1 个答案:

答案 0 :(得分:2)

我会这样做:

  1. 计算所有曲线段的切线角度ang及其变化dang

    您可以使用atanxyatan2作为

    ang[i] = atanxy(x[i]-x[i-1],y[i]-y[i-1]);
    dang[i] = ang[i]-ang[i-1];
    
  2. 查找inflex积分(黑色)

    在这些点上dang的符号正在改变

    dang[i-1]*dang[i+1]<0.0
    

    但您需要正确处理dang=0.0元素(需要在它们之前和之后扫描)。这些点将是输出多边形的基本骨架

  3. 添加bumps max points(绿色)

    在这些点处,切线角度在最近的焦点之间,因此要找到两个焦点之间的最大点i0i1找到最接近的角度

    angavg=0.5*(ang[i0]+ang[i1])
    

    不要忘记

    |ang[i]-angavg|<=PI
    

    所以+/- 2.0*PI如果不是这样的话

  4. 现在您应该拥有闭合多曲线的所有重要点......

    它应该是这样的:

    img

    CW / CCW 或红/蓝只表示dang[i]的标志......

  5. <强> [注释]

    应保留输出点类型(inflex / maxpoint),因为它可以在以后用于比较和检测形状......