Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript算法:检查x/y点以获得组件是否为圆_Javascript_Algorithm_Math_Matrix_Coordinates - Fatal编程技术网

javascript算法:检查x/y点以获得组件是否为圆

javascript算法:检查x/y点以获得组件是否为圆,javascript,algorithm,math,matrix,coordinates,Javascript,Algorithm,Math,Matrix,Coordinates,我有一个这样的矩阵,所以我希望你能得到圆的轮廓: var coordinates = [ [13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1], [11,2],[21,2], [9,3],[23,3], [8,4],[24,4], [8,5],[24,5], [7,6],[25,6], [6,7],[26,7], [6,8],[26,8], [6,9],[26,9], [5,10],[26,10],

我有一个这样的矩阵,所以我希望你能得到圆的轮廓:

var coordinates = [
  [13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],
  [11,2],[21,2],
  [9,3],[23,3],
  [8,4],[24,4],
  [8,5],[24,5],
  [7,6],[25,6],
  [6,7],[26,7],
  [6,8],[26,8],
  [6,9],[26,9],
  [5,10],[26,10],
  [5,11],[26,11],
  [5,12],[26,12],
  [5,13],[26,13],
  [5,14],[26,14],
  [6,15],[26,15],
  [6,16],[26,16],
  [6,17],[25,17],
  [7,18],[24,18],
  [8,19],[24,19],
  [8,20],[23,20],
  [9,21],[22,21],
  [11,22],[12,22],[13,22],[14,22],[15,22],[16,22],[17,22],[18,22],[19,22],[20,22]]
编辑1:轮廓如何?轮廓不包含空格(因此每个y值至少有2个x值)

编辑2:什么是圆?搜索更多或更少的“精确圆”,如下面的示例所示!(每个点的半径几乎相同)

我还有一个这样的数组,包括轮廓的所有位置:

var coordinates = [
  [13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],
  [11,2],[21,2],
  [9,3],[23,3],
  [8,4],[24,4],
  [8,5],[24,5],
  [7,6],[25,6],
  [6,7],[26,7],
  [6,8],[26,8],
  [6,9],[26,9],
  [5,10],[26,10],
  [5,11],[26,11],
  [5,12],[26,12],
  [5,13],[26,13],
  [5,14],[26,14],
  [6,15],[26,15],
  [6,16],[26,16],
  [6,17],[25,17],
  [7,18],[24,18],
  [8,19],[24,19],
  [8,20],[23,20],
  [9,21],[22,21],
  [11,22],[12,22],[13,22],[14,22],[15,22],[16,22],[17,22],[18,22],[19,22],[20,22]]
检查坐标是否匹配为圆的好方法是什么

我的第一个想法是使用这样的代码,但我相信有一种更有效的方法:

[13,1,[15,1,[17,1,[18,1,[19,1,[19,1,[19,1,[19,1,[19,1,[19,1,[11,1,[11,2,[21,2,[21,2,[9,2,[9,3[9[9,1[13[13[[13[[13[13[13[13[13,1][[[[[13[13,1][[13[13[13,1][13,1][[[13[13[13[13,1][[11[11,1][11,1[11,1][[11,1[11,1[11,1[11,1[11,1[11,1[11,1[11,1[11,1[11,1[11,1[11,1[11,1[11,1[11,1[11,11,1[11,11,11,11,11,11,11[26,16]、[6,17]、[25,17]、[7,18]、[24,18]、[8,19]、[24,19]、[8,20]、[23,20],[9,21],[22,21],[11,22],[12,22],[13,22],[14,22],[15,22],[16,22],[17,22],[18,22],[19,22],[20,22]] 变量no_圆=[[13,1],[14,1],[25,4]] Array.prototype.is_circle=函数(){ 最小值={ “x”:无限, “y”:无穷大 }; var max={ “x”:0, “y”:0 }; 变量中心={ “x”:0, “y”:0 }; 变异半径; this.forEach(函数(a){ a[0]=a[0] a[1]=a[1] 如果(a[0]>max.x)max.x=a[0]; 如果(a[0]max.y)max.y=a[1]; 如果(a[1]r-1和半径[0]r-1和半径[1]r-1和半径[2]r-1和半径[3]console.log(result2)您的算法似乎只检查X轴和Y轴上最远的四个点。我想如果您提供表示方形的点,它也将通过
is_circle
测试


我建议你用一些额外的圆度裕度进行两阶段测试,称为
e
。遍历整组点,记住
x\u min,y\u max
y\u max
。然后检查x的增量和y的增量之间的差值是否在误差裕度范围内,即
abs((x\u max-x\u min)-(y\u max-y\u min))计算机不能处理“或多或少的精确”就像人类一样。除非你想钻研机器学习解决方案,否则你需要从算法上定义这意味着什么。从最左边/右边向上/向下取中间的中心,然后你就完成了。为什么?如果组件是圆或其他什么东西,我就不会得到信息,我只知道中心点。例如,它是c也应该是正方形,@JonasW@JonasW。你的评论没有多大意义,而且过于简单化,如果我理解正确,你可以尝试在轮廓上拟合一个圆(参见示例),并使用拟合余数作为衡量你的形状“圆形”的标准。匿名否决票?写简短的评论是否有害?