给定一个 3D 网格、一个作为球体中心的 3d 点和一个半径,我想快速计算球体包含或相交的所有单元格。
目前,我采用球体的(网格对齐)边界框并计算该边界框的最小和最大点的两个单元格。然后,对于这两个单元格之间的每个单元格,我进行盒球相交测试。
如果有更有效的东西就好了
thanks!
有一个用于绘制圆圈的 Bresenham 算法的版本。考虑 z=0 处的二维位置(假设球体现在位于 0,0,0),并仅查看网格点的 x-y 平面。从 x= R, y=0 开始,遵循 Bresenham 算法直到 y = y_R, x=0,除了不绘图之外,您只需使用结果即可知道所有具有较低 x 坐标的网格点都在圆内,向下到 x=x_center。将它们放入列表中,计算它们或以其他方式记下。完成二维问题后,重复改变 z 并使用减小的半径 R(z) = sqrt(R^2-z^2) 代替 R,直到 z=R。
如果球体中心确实位于某个网格点上,您就知道球体右半部分内部或外部的每个网格点在左侧以及顶部/底部都有一个镜像伙伴,因此您可以进行一半的计数/每个维度的列表。您还可以仅将 Bresenham 运行到 45 度线,从而节省时间,因为相对于中心的任何 x,y 点都有一个伙伴 y,x。如果球体可以在任何地方,您将必须计算每个八分圆的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)