gpt4 book ai didi

javascript - 使用正弦和余弦从二维坐标创建球体

转载 作者:行者123 更新时间:2023-11-30 16:29:55 25 4
gpt4 key购买 nike

什么。我要实现的是拥有一个 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 轴上不稳定:

hi mom

最佳答案

你得到的是半个正弦波绕y轴的旋转,水平半径为sin(y*pi/2) for y在 0..2。因此,尖端位于北极和南极。


坐标应该是,使用u=plot[i].x * 2*Math.PI, v=plot[i].y * Math.PI

x : sin(u)*sin(v)
y : cos(v)
z : cos(u)*sin(v)

这将为您提供单位球体上的分数。您对 Math.sin(Math.PI*2) 的担忧是没有根据的,我希望 Math.sin(6.283185307) 离零更远,因为参数是 2*pi 的更差的近似值。 (正如 Tomasz Jakub Rup 评论中的实际值所证实的那样。)

关于javascript - 使用正弦和余弦从二维坐标创建球体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33475170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com