【发布时间】:2016-02-02 04:36:15
【问题描述】:
什么。我要实现的是拥有一个 2d 坐标数组并将它们映射到球体的 3d 表面。为了弄清楚如何做到这一点,我有一个 xy 坐标数组
我正在使用以下循环在每个轴上生成从 0 到 1 的 20*20 xy 坐标:
var plot = []
for (var i = 0; i <= 20; i++) {
for (var ii = 0; ii <= 20; ii++) {
plot.push({
x: ii/20,
y: i/20
})
}
}
然后我遍历数组并将 xy 值转换为 xyz 值:
for (var i = 0; i < plot.length; i++) {
points.push({
x: Math.sin(plot[i].x*(6.283185307)) * Math.sin(plot[i].y * Math.PI),
y: plot[i].y * 2,
z: Math.cos(plot[i].x*(6.283185307)) * Math.sin(plot[i].y * Math.PI)
});
}
我有两个问题:
我必须使用 6.2831.. 因为 Math.sin(Math.PI*2) 不返回 0
返回的球体在 y 轴上不稳定:
【问题讨论】:
-
Math.sin(Math.PI*2)=-2.4492935982947064e-16,Math.sin(6.283185307)=-1.7958636867904636e-10。 Math.PI*2 比 6.283185307 更接近 0 -
你也可以写
Math.sin ( angle % ( Math.PI * 2 ) ),然后返回0
标签: javascript math three.js