用户:
Ezra__查看:0 回复:9 评论:0 创建时间:2023-01-24T10:24:12
看前须知:球的一般方程:(x-x0)^2+(y-y0)^2+(z-z0)^2=r^2
/*球的参数方程:
x=x0+r·sinθcosφ
y=y0+r·sinθsinφ
z=z0+r·cosθ
(其中θ∈[0,2π],是方位角;φ∈[0,π],是仰角)
可以像画圆一样用参数方程做球
*/
function sphere(x, y, z, r, voxel, acc, solid) {//分别对应球心坐标(x, y, z),半径r,方块v,精度acc(取值建议0.5)),是否实心solid
if (r <= 0) return;
for (let theta = 0; theta <= 360; theta += acc) {//遍历θ值
for (let phi = 0; phi <= 180; phi += acc) {//遍历φ值
let radth = (theta * Math.PI) / 180,//转弧度制
radph = (phi * Math.PI) / 180;//转弧度制
voxels.setVoxel(//套公式
Math.round(x + r * Math.sin(radth) * Math.cos(radph)),
Math.round(y + r * Math.sin(radth) * Math.sin(radph)),
Math.round(z + r * Math.cos(radth)),
voxel
)
}
}
if (solid) {//以递归的思路作实心球
sphere(x, y, z, r - 1, voxel, acc, solid);
}
}
sphere(16,16,16,16,127,1,false);//示例:做一个球心坐标(16, 16, 16),半径16,方块编号127,精度为1的空心球
大佬勿喷,大佬勿喷,大佬勿喷