我正在尝试测试路径或折线是否描述了java中的圆。我该怎么做?我正在考虑测试路径上所有点的两点之间的最大距离是否几乎相同(考虑到一些错误)。这能行吗?我还有什么其他可能性可以检查?
假设 2D...
-
计算箱
因此,从您获得的所有采样点中找到最小和最大
x,y
坐标值x[i],y[i]
。让我们称它们为x0<=x1
和y0<=y1
x0,y0,x1,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
那么你没有圆圈。
另请查看此内容:
- 算法:椭圆匹配
还有另一个告诉电话,比如
- 如果您知道半径和路径长度,那么它应该与圆周长匹配
- 均匀采样的闭合圆形路径的平均点也是中心
- 均匀采样的圆形路径的线段之间的角度是恒定的
- 圆只是凸的
圆的一般方程与中心(0,0)a^2 + b^2=r^2
;其中r是圆的半径,a和b是放在a和b中的点的坐标,并得到r的值,如果r的值对于a和b的所有值都相同,则路径是一个圆。 注意:- 对于点 (h,k) 处的中心,公式更改为 :-
(a-h)^2+(b-k)^2=r^2;