使用javascript

时间:2017-11-17 19:10:37

标签: javascript jquery arrays object matrix

所以我想用javascript获取矩形的4个角位置。 ( - >顶部,底部,左侧,右侧)

我已经找到了一个函数,它将矩形(1个字符)的所有位置[x,y]从矩阵返回到数组形式。

var matrix=[
 '000000000000',
 '000111111000',
 '000111111000',
 '000111111000',
 '000000000000'
]

所以矩形位置的result_array看起来像他的:

var result_array=[
  [3,1], [4,1], [5,1], [6,1], [7,1], [8,1],
  [3,2], [4,2], [5,2], [6,2], [7,2], [8,2],
  [3,3], [4,3], [5,3], [6,3], [7,3], [8,3]
]

var my_result_should_be: {
      "top_left":[3,1],
      "top_right":[8,1],
      "bottom_left":[3,3],
      "bottom_right":[8,3]
    }

但是现在 - 如何获得矩形点(x / y阵列)的角位置?

我的想法是所有矩形应该有:

  • 分钟。 1x最大y_value,
  • 分钟。 1x最小的y_value,
  • 分钟。 1x最大x_value,
  • 分钟。 1x最小x_value

但是我想从矩形位置计算4个角点([1,3], [1,8], [3,3], [3,8]),即使矩形以未知角度旋转,如下面的符号所示:

var rotated_matrix=[
  '000000000000',
  '011111000000',
  '000111110000',
  '000001111100',
  '000000000000'
]

var result_array= [
  [1,1],[2,1],[3,1],[4,1],[5,1],
  [3,2],[4,2],[5,2],[6,2],[7,2],
  [5,3],[6,3],[7,3],[8,3],[9,3],
]

var my_result_should_be: {
  "top_left":[1,1],
  "top_right":[5,1],
  "bottom_left":[5,3],
  "bottom_right":[9,3]
}

所以我编写了一个能够从上面返回列出的点的函数(maxX,minX,maxY,minY),但是因为可能有多个最大/最小点(因为例如Y值是相同但是x值不是)我不确定哪些点是正确的。特别是如果旋转矩形......



var result_array=[[1,3], [1,4], [1,5], [1,6], [1,7], [1,8],[2,3], [2,4], [2,5], [2,6], [2,7],[2,8],[3,3], [3,4], [3,5], [3,6], [3,7],[3,8]];

var results = {
   'maxX': result_array.filter(e => e[0] === Math.max(...result_array.map(e => e[0]))),
   'minX': result_array.filter(e => e[0] === Math.min(...result_array.map(e => e[0]))),
   'maxY': result_array.filter(e => e[1] === Math.max(...result_array.map(e => e[1]))),
   'minY': result_array.filter(e => e[1] === Math.min(...result_array.map(e => e[1])))
   }
      
   console.log(results);




这是上述功能的结果,所以你可以看到有几个极端点"但哪一个是正确的呢?

var extreme points: {
  "maxX":[[3,3],[3,4],[3,5],[3,6],[3,7],[3,8]],
  "minX":[[1,3],[1,4],[1,5],[1,6],[1,7],[1,8]],
  "maxY":[[1,8],[2,8],[3,8]],
  "minY":[[1,3],[2,3],[3,3]]
}

我希望有人知道如何解决这个问题,但是,

提前致谢

0 个答案:

没有答案