@ allmaps/ 三角形
这个包提供了三角化多边形的方法:即返回一组分割多边形的三角形.
三角形符合某些条件: distance 提供了参数,三角形不超过 distance,一般不包含非常尖锐的角度或非常钝钝的角度.
此软件包用于内部 @ allmaps/ 放弃 将地理参考地图(使用GCP作为施泰纳点,使用可应用的面具作为施泰纳多边形)的全遮罩分解为一组三角形,可以使用WebGL来渲染.
如何运作
它使用现代 受限的 Delaunay 三相算法 多边形,使用 断层 财务报告和审定财务报表 约束者。 。 。 .
为了多了解一下它是如何运作的 看看这个 可观察笔记本。 。 。 .
简言之,三角形首先在多边形的边框内使用网格点来作成, 间距d distance 和由多边形边缘产生的分数(使用插值) distance),提供了施泰纳多边形的分和分. 从所有这些点来看,都进行了德劳奈三角测量。 这导致大多数网格细胞产生两个条件良好的三角. 后由相插多边形的边缘和相插斯泰纳多边形的边缘来制约三角.
安装
这是一个只在浏览器和Node.js中工作的无害环境管理模块.
用 pnpm 安装 :
pnpm install @allmaps/triangulate
使用量
这个软件包暴露出两个功能: triangulate() 简单地三角化多边形并返回三角形,以及 triangulateToUnique() 返回一组对象,这些对象使用它们之间独特的点和边来描述三角关系.
在最简单的情况下,可以使用如下:
import { triangulate } from '@allmaps/triangulate'
// Note that polygons are in double brackets (an array of an outer ring, and possibly inner rings if there are holes) and their rings are not round-trip (the first coordinate is not repeated at the and)
const polygon = [
[
[0.592, 0.953],
[0.304, 2.394],
[2.904, 2.201],
[2.394, 0.232]
]
]
const distance = 1
// Compute constrained triangulation of `polygon` using a grid of size `distance`
const triangles = triangulate(polygon, distance)
// triangles = [
// [
// [ 1.304, 1.232 ],
// [ 1.4655588463411926, 0.6034795070965593 ],
// [ 0.592, 0.953 ]
// ],
// ...
// ]
两种功能都可以通过以下选项:
steinerPoints:施泰纳点. 这些成为了在构建三角形时考虑的第三组点.steinerPolygons:斯坦纳多边形. 它们是多边形,它们的分点需要作为施泰纳分来添加,其边缘(用距离插入)也需要被限制.minimumTriangleAngle: 由此产生的三角形最小角(以弧度计). 利用这个选项,可能由内部函数产生的sliver多边形可以被去除. 默认 :0.01。 。 。 .computeInsideSteinerPolygons:是否计算每个三角形,是否在施泰纳多边形内.
许可证
麻省理工学院
API 密码
页:1
稳定
- Constrainautor不允许自相交集多边形,并将为此类输入引起出错.
基准
对于一个10分多边形(有直径~200),这里有一些以给定距离计算三角的基准:
triangulate(polygon, 1000)(无网点):74544个操作/s计算出8个三角形triangulate(polygon, 100): 56849 计算出11个三角形triangulate(polygon, 10): 2163 计算出435个三角形triangulate(polygon, 1): 3个操作/s计算出38352个三角形
见 ./bench/index.js。 。 。 .
要运行基准,就运行 npm run bench。 。 。 .