确定路径是否描述圆圈

时间:2017-03-27 13:05:48

标签: java geometry

我正在尝试测试路径或折线是否描述了java中的圆圈。我怎样才能做到这一点?我正在考虑测试路径上所有点的两点之间的最大距离是否几乎相同(记住一些错误)。这可以吗?还有什么其他的可能性来检查它?

2 个答案:

答案 0 :(得分:1)

假设2D ......

  1. 计算bbox

    所以从您获得的所有采样点x,y中找到最小和最大x[i],y[i]坐标值。让我们称他们x0,y0,x1,y1 x0<=x1y0<=y1

  2. 计算圈子中心cx,cy

    只是bbox的中心所以:

    cx = 0.5*(x1+x0)
    cy = 0.5*(y1+y0)
    
  3. 计算半径

    如果你真的有一个圆圈,那么bbox应该是正方形,所以

    fabs((x1-x0)-(y1-y0)) <= zero_threshold
    

    如果没有,你没有圆圈。如果是,则半径为

    r = ~0.5*(x1-x0) = ~0.5*(y1-y0)
    

    平均值......

    r = 0.25*(x1-x0 + y1-y0)
    
  4. 检查与圈子的偏差

    计算最大abs差异...

     d = max ( fabs( (x[i]-cx)^2 + (y[i]-cy)^2 - r^2) )
    

    如果d > max_radius_difference_threshold^2则您没有圈子。

  5. 同时检查一下:

    还有另一种说法

    • 如果你知道半径和路径长度,那么它应该与圆周长相匹配
    • avg点统一采样关闭循环路径也是中心
    • 均匀采样圆形路径的线段之间的角度是常数
    • 圆圈仅凸起

答案 1 :(得分:0)

圆的一般方程是a^2 + b^2=r^2,中心(0,0);其中r是圆的半径,a和b是放在a和b中的点的坐标,如果r的值对于a和b的所有值都相同则得到r的值,则路径是圆。 注意: - 对于某点(h,k)的中心,方程式变为: -

(a-h)^2+(b-k)^2=r^2;