球面绘制六边形——二维平面坐标转成三维球面坐标

难点在于怎样将二维六边形坐标转到三维球面坐标上
const arr = ddd(-50, 0, size, 23) // 自己写的一段计算六边形坐标的函数来获取二维的坐标点

// 传入球的半径及得到的二维坐标点
function getXYZ (r, arr) {
const dataSet = [];
const L = 2 * Math.PI * r; // 算出圆周长
const W = L * 1.70; //定义球面铺开之后的宽高,至于为什么要乘以或者除以这些数,还在研究当中
const H = L / 3.5;
for (let i = 0; i < arr.length; i += 1) {
const x = (360 / W) * arr[i].x - 180;
const y = (180 / H) * arr[i].y - 90;
dataSet.push({x: x, y: y})
}
return dataSet;
} // 这样就拿到了二维坐标对应到球面的坐标,不清楚算不算经纬度

// 大球转换经纬度坐标(coord:弧度)
// 最后就是将坐标带入函数算出对应球面的坐标
function bigLatlngToXYZ® {
const sphereArray = [];
for (let i = 0; i < dataSet.length; i += 1) {
let lat = dataSet[i].x;
let lng = dataSet[i].y;
const phi = ((90 - lat) * Math.PI) / 180;
const theta = ((180 - lng) * Math.PI) / 180;
const x = r * Math.sin(phi) * Math.cos(theta);
const y = r * Math.cos(phi);
const z = r * Math.sin(phi) * Math.sin(theta);

  sphereArray.push({ x: x, y: y, z: z });
}
return sphereArray;

}

猜你喜欢

转载自blog.csdn.net/weixin_42821179/article/details/87372088