Three.js通过极坐标计算球面点位未生成正确球体的问题
错误原因
- 坐标转换公式不符合球面方程约束:原代码计算得到的x、y、z分量平方和不等于固定半径平方,因此点位无法落在固定半径的球面上
- 极角遍历范围错误:球坐标的极角取值范围为0π(即0180度),原代码遍历0~360度会导致点位重复映射,破坏球面分布
修复方案
修正坐标转换公式保证三个分量平方和等于半径平方,同时调整极角的遍历范围即可生成标准球面,修正后代码如下:
const distance = 1000; // theta为方位角,范围0~360度,绕轴旋转一周覆盖水平全向 for (var i = 0; i < 360; i += 10) { // phi为极角,范围0~180度,覆盖从顶部到底部的全纬度 for (let j = 0; j < 180; j += 10) { let theta = i * (Math.PI / 180); let phi = j * (Math.PI / 180); // 符合球面方程的坐标转换逻辑 let x = Math.sin(phi) * Math.cos(theta) * distance; let y = Math.cos(phi) * distance; let z = Math.sin(phi) * Math.sin(theta) * distance; const lightSphere = new THREE.Mesh(sphereGeometry, sphereMaterial); lightSphere.position.set(x, y, z); scn.add(lightSphere); } }
内容的提问来源于stack exchange,提问作者otto
相关产品推荐
相关产品推荐

