这是我在这里问过的第一个问题!如果我以某种方式做错了,请提前道歉。
我编写了一个程序,它在三个.js中堆积了球体。
每个球体以随机生成(在某些边界内)x和z坐标开始,并且y坐标高于地平面。我从每个球体的顶点投射光线,以查看它在与现有网格相交之前可以落下多远。
对于每个球体,我在80个不同的随机xz位置进行测试,看看它可以在哪里落到最远的位置,然后“掉落”。它进入那个位置。
这是为了创建像这样的泡泡塔:
然而,我注意到当我使气泡半径非常小并且塔的底座尺寸变大时,会发生这种情况:
如果我将递归从80下调,则效果不太明显。出于某种原因,three.js似乎认为球体可以在基座正方形的角落处进一步下降。原点恰好位于基地广场的中心 - 也许这是相关的。
当我记录我从raycaster接收到的所有跌落距离时,它们确实越大,距离广场中心越远......但仅在小数点后11或12位。
这不是我试图解决的问题(在我选择最大的一个之前,我可以将下降距离舍入到最接近的第10个小数位),但我非常好奇。有谁知道为什么会这样?以前有人遇到类似的东西吗?
编辑:
我编辑了我的代码以移动所有内容,使原点不再位于基本方块的中心:
所以我的思考是正确的......这种现象与距离原点的距离有关,而不是与球落在其上的表面有什么关系?
答案 0 :(得分:1)
事实上,您所看到的模式正是因为塔底部的角落和边缘离您放下球的原点最远。您正在创建一个直角三角形(见下图),其中竖线" leg"是从原点开始的线,你将球放到网格地板正下方的点(直角到地板 - 因此名称,直角三角形)。 斜边始终是直角三角形中最长的一条腿,从原点下方点开始射出的光线越多,斜边越长,你的算法越有利于更长时间距离(无论多么分数)。
增加塔底的尺寸会夸大这种影响,因为斜边测量现在可以变得更大。减小球的大小也有利于你所看到的模式,因为现在每个球没有占用太多的空间,因此对角落的远距离测量不会像更大的球一样快速地填充所以现在更多的球会在填充其余空间之前聚集在边缘。
将掉落的原点移动到一侧或另一侧会产生较长的距离(斜边)到对立的侧面和角落,这样球就会首先填充这些远处的位置。
当你将样本量从80减少到20时,你看到效果较少的原因是,检测这些球落到的更远的位置的机会就更少了(赔率游戏)。 / p>
直角三角形:
背面的草图: