我正在尝试测试路径或多段线是否描述了 java 中的圆。我怎样才能做到这一点?我正在考虑测试路径上所有点的两点之间的最大距离是否几乎相同(考虑到一些错误)。这行得通吗?我还需要检查哪些其他可能性?
最佳答案
假设二维...
计算 bbox
所以找到最小值和最大值
x,y
所有样本点的坐标值x[i],y[i]
你得到了。让我们称他们为x0,y0,x1,y1
其中x0<=x1
和y0<=y1
计算圆心
cx,cy
只是 bbox 的中心所以:
cx = 0.5*(x1+x0) cy = 0.5*(y1+y0)
计算半径
如果你真的有一个圆,那么 bbox 应该是正方形的
fabs((x1-x0)-(y1-y0)) <= zero_threshold
如果没有你就没有圈子。如果是半径是
r = ~0.5*(x1-x0) = ~0.5*(y1-y0)
平均值也是...
r = 0.25*(x1-x0 + y1-y0)
检查是否偏离圆圈
计算最大绝对差异...
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/