【发布时间】:2016-01-03 08:38:52
【问题描述】:
这是我在这里问的第一个问题!如果我做错了,请提前道歉。
我编写了一个程序,它在 three.js 中堆叠球体。
每个球体都以随机生成的(在特定范围内)x 和 z 坐标以及高于地平面的 y 坐标开始。我从球体的每个顶点投射光线,以查看它在与现有网格相交之前可以下降多远。
对于每个球体,我在 80 个不同的随机 xz 位置对其进行测试,看看它在哪里可以落得最远,然后将其“放下”到那个位置。
这是为了创造像这样的泡泡塔:
但是,我注意到当我将气泡半径设置得非常小而塔的基础尺寸变大时,会发生这种情况:
如果我将递归从 80 降低,这种效果就不那么明显了。出于某种原因,three.js 似乎认为球体可以在基础正方形的角落进一步下降。原点正好在基础正方形的中心 - 也许这是相关的。
当我在控制台记录我从光线投射器接收到的所有跌落距离时,它们确实越大,距离广场中心越远……但仅在小数点后第 11 位或第 12 位。
这不是我要解决的问题(我可以在选择最大的一个之前将跌落距离四舍五入到最接近的小数点后 10 位),但我很好奇。有谁知道为什么会这样?有没有人遇到过类似的情况?
编辑:
我编辑了我的代码以移动所有内容,使原点不再位于基础正方形的中心:
所以我的想法是否正确...这种现象与与原点的距离有关,而不是与球落到的表面有关?
【问题讨论】:
-
我对three.js一无所知,但这听起来像是一个浮点精度问题。顺便说一句,第一个问题很好,欢迎。
-
谢谢!这不是我所知道的——你能把我链接到任何可以从头开始解释浮点精度的好资源吗?
-
您可以尝试增加您用于单位的数量级。
-
如果你能提供一个我们可以检查的jsfiddle,我们会更容易帮助你。
-
我认为第一个评论者是正确的,如果你检查了数学。而不是与原点的距离,它可能是累积误差,因为浮点尾数远离零 - 这有点相同。