Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Geometry 栅格化和填充超球体的算法?_Geometry_Bresenham_Rasterize_Pixelate - Fatal编程技术网

Geometry 栅格化和填充超球体的算法?

Geometry 栅格化和填充超球体的算法?,geometry,bresenham,rasterize,pixelate,Geometry,Bresenham,Rasterize,Pixelate,我正在尝试栅格化并填充超球体。本质上,我有一个固定大小的d维网格和一个球体(中心、半径),我想找出网格中哪些单元格与球体重叠,并存储它们的坐标 我知道它利用了8路镜像,并生成了圆的外部单元(边框)。我还修改了链接的维基百科代码,以填充圆圈(即,生成边界内所有单元格的坐标) 然而,我不知道更高维度的算法。例如,在4d中,我一直在考虑通过生成所有可能的圆来实现,如下面的伪代码所示。基本思想是,由于4d球体是(x-x0)2+(y-y0)**2+(z-z0)**2+(k-k0)**2=r2,这等于(x-

我正在尝试栅格化并填充超球体。本质上,我有一个固定大小的d维网格和一个球体(中心、半径),我想找出网格中哪些单元格与球体重叠,并存储它们的坐标

我知道它利用了8路镜像,并生成了圆的外部单元(边框)。我还修改了链接的维基百科代码,以填充圆圈(即,生成边界内所有单元格的坐标)

然而,我不知道更高维度的算法。例如,在4d中,我一直在考虑通过生成所有可能的圆来实现,如下面的伪代码所示。基本思想是,由于4d球体是(x-x0)2+(y-y0)**2+(z-z0)**2+(k-k0)**2=r2,这等于(x-x0)2+(y-y0)**2=r2-(z-z0)**2-(k-k0)**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)

<>这似乎是相关的,但是我不理解答案。

一段时间没有人回答,所以这里是简单而明显的C++解决方案:

//---------------------------------------------------------------------------
常数int N=10;//尺寸数
结构点{double a[N];};//N维点
#定义颜色DWORD//颜色属性的类型
//---------------------------------------------------------------------------

//nx嵌套(a=a0;aA填充球体的更快方法很可能是蛮力法,即绘制距离中心小于或等于半径的所有体素。由此计算曲面可能有点棘手。我建议检查我的答案,看看是否可以将其应用于n维:你的光栅化是什么设备?您正在将N-D渲染为?-D,以及如何(什么类型的投影)填充/着色技术?您需要什么分辨率,什么fps…如果没有这些信息,很难回答。@aeolist I添加了[edit2],并提供了一些新的信息、代码和屏幕截图