假设有一个体素(x,y,z的大小相同,即=>立方),并且有一条射线穿过该体素,如何确定一条射线可以通过的最大体素数?
如果我们考虑平面像素和2d正方形像素(棋盘),2*N-1
那么如果我们计算真实的交点(例如,起点0,-。5和方向Pi / 4)和3*N-2
,则可以看到光线最多可以通过像素。我们计算触摸(按角落)的单元格。
很难想象头部的3d情况:),但是我怀疑3 * N - 2
当光线以(0,0,0)-(1,0,0)的顺序穿过细胞时,与主对角线平行的射线会与细胞相交-(1,1,0)-(1,1,1)等
添加。快速的傻射线追踪建模显示了3 * N - 2
可能的价值:
var
sx, sy, sz: Double;
x, y, z: Double;
ox, oy, oz, nx, ny, nz, Cnt: Integer;
begin
// starting point coordinate
sx := 0;
sy := 0.7;
sz := 0.7;
// current coordinates
X := sx;
Y := sy;
z := sz;
// previous cell indexes
ox := Floor(X);
oy := Floor(Y);
oz := Floor(z);
Cnt := 1;
Memo1.Lines.Add(Format('%d: (%d, %d, %d)', [Cnt, ox, oy, oz]));
repeat
// new cell indexes
nx := Floor(X);
ny := Floor(Y);
nz := Floor(z);
// if cell changes
if (nx > ox) or (ny > oy) or (nz > oz) then begin
Inc(Cnt);
Memo1.Lines.Add(Format('%d: (%d, %d, %d)', [Cnt, nx, ny, nz]));
end;
ox := nx;
oy := ny;
oz := nz;
// do small step in main diagonal direction
X := X + 0.03;
Y := X + 0.03;
z := z + 0.03;
until (X > 4) or (Y > 4) or (z > 4);
给出4 * 3-2相交的体素的输出:
1: (0, 0, 0)
2: (0, 0, 1)
3: (0, 1, 1)
4: (1, 1, 1)
5: (1, 1, 2)
6: (1, 2, 2)
7: (2, 2, 2)
8: (2, 2, 3)
9: (2, 3, 3)
10: (3, 3, 3)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句