2d-polygon-self-intersections 中文文档教程

发布于 9年前 浏览 18 项目主页 更新于 3年前

2d-polygon-self-intersections

find self-intersections in a 2d polygon

这个库可能不快,但是很健壮。 强大的事实是它将找到多边形中的所有自相交 - 当然减去共享端点。

您可以预期 O(n^2) 的时间复杂度

为什么我们不使用 Bentley–Ottmann? 我们可能会在未来,但这需要一些时间,并且拥有一个检测自相交的功能机制比一个不存在的机制要好得多。 api 不必为此发生更改。

install

npm install 2d-polygon-self-intersections

use

var isects = require('2d-polygon-self-intersections');

var poly = [
  [0, 0],
  [10, 0],
  [0, 10],
  [10, 10]
];

var r = isects(poly);
console.log(r);
// outputs: [ [ 5, 5 ] ]

api

isects(polygon[, filterFn])

  • polygon - an array of 2 component arrays (i.e. a triangle [[0, 0], [10, 0], [10, 10]]) or an array of objects: [{x:0, y:0}, {x:10, y:0}, {x:10, y:10}]
  • filterFn - a filter function called whenever an intersection is found: filterFn(isect, start0, end0, start1, end1, unique)
  • isect - current intersection (e.g. [5, 5]) - mutations in this array get collected
  • index0 - index of the segment (e.g 1)
  • start0 - start of the first segment (e.g [0, 5])
  • end0 - start of the first segment (e.g [10, 5])
  • index0 - index of the segment (e.g 3)
  • start1 - start of the first segment (e.g [5, 0])
  • end1 - start of the first segment (e.g [5, 10])
  • unique - boolean representing whether or not this intersection point has been seen before
  • return true to collect and false to discard

返回< /strong> 如果没有交叉点,则为空数组或表示交叉点的 2 个组件数组的数组。

注意:该库假定多边形是封闭的,因此手动将起点添加为终点无效。

另请注意,每个十字路口有 2 个交叉路口,默认情况下,该库只会报告一个 - 所有交叉路口都是唯一的。 可以使用 filterFn 更改此行为。

license

麻省理工学院

2d-polygon-self-intersections

find self-intersections in a 2d polygon

This library may not be fast, but it is robust. Robust in the fact that it will find all of the self-intersections in a polygon - minus of course shared endpoints.

You can expect a time complexity of O(n^2)

Why wouldn't we use Bentley–Ottmann? We may in the future, but that is going to take some time and having a functional mechanism for detecting self-intersections is far superior to a non-existant one. The api won't have to change for this to happen.

install

npm install 2d-polygon-self-intersections

use

var isects = require('2d-polygon-self-intersections');

var poly = [
  [0, 0],
  [10, 0],
  [0, 10],
  [10, 10]
];

var r = isects(poly);
console.log(r);
// outputs: [ [ 5, 5 ] ]

api

isects(polygon[, filterFn])

  • polygon - an array of 2 component arrays (i.e. a triangle [[0, 0], [10, 0], [10, 10]]) or an array of objects: [{x:0, y:0}, {x:10, y:0}, {x:10, y:10}]
  • filterFn - a filter function called whenever an intersection is found: filterFn(isect, start0, end0, start1, end1, unique)
  • isect - current intersection (e.g. [5, 5]) - mutations in this array get collected
  • index0 - index of the segment (e.g 1)
  • start0 - start of the first segment (e.g [0, 5])
  • end0 - start of the first segment (e.g [10, 5])
  • index0 - index of the segment (e.g 3)
  • start1 - start of the first segment (e.g [5, 0])
  • end1 - start of the first segment (e.g [5, 10])
  • unique - boolean representing whether or not this intersection point has been seen before
  • return true to collect and false to discard

returns an empty array if no interesections or an array of 2 component arrays representing the intersection points.

NOTE: this library assumes the polygon is closed, so manually adding the start point as the end point has no effect.

Also note that there are 2 intersections per crossing, this library by default will only report one - all intersections will be unique. This behavior can be changed with the filterFn.

license

MIT

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文