2013-01-23 71 views
2

我一直voxeljs玩弄,我是新來的3D節目,並在doc說,這個代碼生成「球天下」:生成球與體素

generate: function(x,y,z) { 
    return x*x+y*y+z*z <= 20*20 ? 1 : 0 // sphere world 
}, 

這是怎麼回事實際上產生一個球體?根據我的簡單理解,我認爲它基本上是通過3D世界中的每個「塊」「循環」的?任何進一步的解釋或指向一個很好的教程,這將是一個巨大的幫助!

回答

2

這是基於三維空間中的距離公式,因爲您可以將球體定義爲中心點一定距離內的每個點。

任意兩個物體之間的距離等於(x1-x2)^ 2 +(y1-y2)^ 2 +(z1-z2)^ 2的平方根。

上述函數標記每個體素,如果它們在原點的20個單位內。由於原點爲(0,0,0),距離函數簡化爲x1^2 + y1^2 + z1^2的平方根。這也通過擺脫平方根,並將結果與​​20^2進行比較來拋出另一種優化。

+0

對不起,我已經失去了網絡連接。我喜歡Lucius好看的照片;)但是因爲你更快,我會改變我的答案,但是也要感謝Lucius –

2

你的函數簡單地說:

如果(x, y, z)體素是球體的一部分,返回1,否則0

作者只是適用sphere equation。您的球是由下列一組體素的形成:

enter image description here

即基本上意味着,一個體素是球體的一部分,如果到中心的距離,你的情況(0,0,0) ,小於半徑。聽起來合乎邏輯?距離使用畢達哥拉斯定理計算。通過平方半徑,在你的情況下,你可以比較平方距離並保存平方根,這通常是性能很重的。