3
我想要柵格化並填充超球面。實質上,我有一個固定大小的d維網格和一個球體(中心,半徑),並且想要找出網格中的哪些單元與球體重疊並存儲它們的座標。柵格化和填充超球面的算法?
我知道Midpoint circle algorithm利用8路鏡像併產生一個圓的外部單元格(邊框)。我還修改了鏈接的維基百科代碼以填充圓圈(即,生成邊框內所有單元格的座標)。
但我不知道任何更高維的算法。例如在4d中,我一直在考慮通過產生所有可能的圓來實現,如下面的僞代碼。其基本思想是由於4d球體是(x-x0)2 +(y-y0)** 2 +(z-z0)** 2 +(k-k0)** 2 = r 2,等於(x-x 0)2 +(y-y 0)** 2 = r 2-(z-z 0)** 2 - (k-k 0)** 2。既然我知道如何繪製一個圓,我只需要爲所有可能的z和k值生成所有的圓。
assume center=(x0,y0,z0,k0) and radius r
for all dimensions equal or higher than 2://this is z and k
//make a list of possible values this dimension can take
//from z0 to z0+radius with a step of 1
all_lists.append([dim0,dim0+1,...,dim0+radius])
produce the product of all the lists in all_lists
//now i have a list [[z0,k0],[z0,k0+1],....,[z0+1,k0],[z0+1,k0+1],....,[z0+radius,k0],...[z0+radius,k0+radius]]
for every element l of the list, compute the radius of the circular "cut"
l.append(r**2 - z**2 - k**2)
Now call the Midpoint Circle Algorithm, but for every (x,y) pair that it produces, we need to export 4 points, namely (x,y,±z,±k)
這question似乎相關,但我不明白答案。
更快的填充球體的方法很可能是bru te的方法繪製所有體素的距離中心小於或等於半徑。從那裏開始工作可能會有點棘手。我會建議檢查我的答案在這裏,看看如果你可以應用到n維:http://stackoverflow.com/questions/9683965/draw-a-sphere-surface-in-voxels-efficiently/9687311#9687311 – 2012-03-14 13:03:16
什麼是你的光柵化設備?你正在渲染N-D到?-D以及如何(填充/着色技術是什麼類型的投影)?什麼樣的決議,你需要什麼樣的FPS ...沒有這個信息是很難回答的。 – Spektre 2013-09-30 16:33:55