我正在尝试测试路径或折线是否描述了java中的圆圈。我怎样才能做到这一点?我正在考虑测试路径上所有点的两点之间的最大距离是否几乎相同(记住一些错误)。这可以吗?还有什么其他的可能性来检查它?
答案 0 :(得分:1)
假设2D ......
计算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)
检查与圈子的偏差
计算最大abs差异...
d = max ( fabs( (x[i]-cx)^2 + (y[i]-cy)^2 - r^2) )
如果d > max_radius_difference_threshold^2
则您没有圈子。
同时检查一下:
还有另一种说法
答案 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;