java - 确定 Path 是否描述一个圆

标签 java geometry

我正在尝试测试路径或多段线是否描述了 java 中的圆。我怎样才能做到这一点?我正在考虑测试路径上所有点的两点之间的最大距离是否几乎相同(考虑到一些错误)。这行得通吗?我还需要检查哪些其他可能性?

最佳答案

假设二维...

  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. 检查是否偏离圆圈

    计算最大绝对差异...

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

    如果d > max_radius_difference_threshold^2那你就没有圈子了。

另请检查:

还有另一种说法

  • 如果你知道半径和路径长度,那么它应该与圆的周长相匹配
  • 均匀采样的闭合圆形路径的平均点也是中心
  • 均匀采样的圆形路径的线段之间的角度是恒定的
  • 圆只是凸的

关于java - 确定 Path 是否描述一个圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43047301/

相关文章:

java - 从java中的https-URL读取

algorithm - 如何找出给定圆的周长有多少被其他相交的圆覆盖?

不同版本和更新中的java枚举

java - 从 int 输入获取字符串

java - Mono 与 CompletableFuture

java 。如何从 Jspinner 中获取与 java.util.Date 关联的月、年、日?

c# - Lucene(.Net) 几何(纬度/经度)查询?

php - 将多个相邻的矩形合并为一个多边形

ios - 如何在 iOS 中沿圆圈移动 View Controller

algorithm - 查询矩形集合以查找输入矩形的重叠