(2)、对等距点集进行三角剖分生成Mash
我将三角剖分可以简单理解为以最接近的三点形成三角形,且各线段(三角形的边)皆不相交;这里使用开源库delaunator进行点的三角剖分
// polygon:国家轮廓坐标
// pointsArr:生成的点集
function delaunay(pointsArr, polygon) {
//点集的三角剖分并获取三角形索引值
var indexArr = Delaunator.from(pointsArr).triangles;
//删除轮廓外的三角形
var usefulIndexArr = [];
// 判断一个三角形的重心是否在多边形轮廓内部
for (var i = 0; i < indexArr.length; i += 3) {
// 三角形三个顶点坐标
var p1 = pointsArr[indexArr[i]];
var p2 = pointsArr[indexArr[i + 1]];
var p3 = pointsArr[indexArr[i + 2]];
// 三角形重心坐标计算
var point = [(p1[0] + p2[0] + p3[0]) / 3, (p1[1] + p2[1] + p3[1]) / 3];
if (pointInPolygon(point, polygon)) {
usefulIndexArr.push(indexArr[i + 2], indexArr[i + 1], indexArr[i]);
}
}
return usefulIndexArr
}
渲染国家的球面轮廓Mesh
function countryMesh(R, polygonArr) {
var geometryArr = [];
polygonArr.forEach(obj => {
var polygon = obj[0];
var pointsArr = gridPoint(polygon);
// 三角剖分生成顶点坐标对应三角形索引
var trianglesIndexArr = delaunay(pointsArr, polygon)
//三角形顶点经纬度坐标转化为球面坐标
v