在JavaScript中的一组垂直线段中查找所有不相交的交点

我们有一组由y1和y2坐标定义的垂直区域,其中y1是每个区域的起点,y2是每个区域的终点。

我们的坐标系的原点是左上角,因此y2始终大于y1。

这是一个例子-

const regions = [

   [10, 100],

   [50, 120],

   [60, 180],

   [140, 220]

];

我们需要编写一个JavaScript函数,该函数将一个区域数组作为第一个参数,将数字作为第二个参数。

我们想找出所有大于一定大小的不相交的交集(由函数的第二个参数指定)。

假设有20个单位。

然后上述数组的输出应类似于-

const output = [

   [60, 100],

   [140, 180]

];

我们可以使用简化的算法,并在整个产品中使用它们来搜索重叠项。

然后,通过迭代和过滤仅未知匹配项来获得通用部分。

示例

为此的代码将是-

const regions = [

   [10, 100],

   [50, 120],

   [60, 180],

   [140, 220]

];

const getIntersections = (arr,num) => {

   let disjoint, res;

   return arr.reduce((acc,val,ind,array) => {

      if (val.used){

         return acc;

      };

      res = array.map((el, index) => array[(ind + index) % array.length]) .reduce((s,e) => {

         disjoint = [Math.max(s[0],e[0]), Math.min(s[1],e[1])];

         return disjoint[0] < disjoint[1] ? (e.used = true, disjoint) : s;

      });

      res[1] - res[0] > num && acc.push(res);

      return acc;

   },[]);

}

console.log(getIntersections(regions, 20));

输出结果

控制台中的输出将是-

[ [ 60, 100 ], [ 140, 180 ] ]

以上是 在JavaScript中的一组垂直线段中查找所有不相交的交点 的全部内容, 来源链接: utcz.com/z/316098.html

回到顶部