有效地在体素中绘制球体表面?

2023-11-29

我有一个大型 3D 网格(为简单起见,最小网格框尺寸为 1x1x1),并且只想在此网格中绘制大量半径可变的球体的表面。然而,我想消除孔和土堆的典型光栅化问题。

我也不想采用强力方法(找到球体中心半径内的所有像素,删除非边界像素),因为我将创建数百万个这样的球体,其中一些球体可能具有非常高的半径。这布雷森汉姆算法for Circles 与我想要的类似,但我想知道如何使其适应球体形状。

有人可以帮忙吗?


好吧,我想我已经解决了。但不确定这是否是最有效的版本。

本质上,球体的表面由一组无限的半径为 r 的圆组成,当您穿过与该圆相交的平面垂直的轴时,半径先增大然后减小。半径的增大和减小可以用半圆来描述。

在离散空间中,我们可以通过使用 Bresenham 算法绘制一组圆,以有效的方式对球体表面进行建模,其中半径是使用附加的 Bresenham 圆计算的,其半径是球体的半径。该半径被设想为在三维空间中从圆“向上”延伸。

其他圆圈围绕它建立起来,就好像主圆圈是一个构建框架。

我不完全确定这是否那么容易理解,所以希望该算法可以提供更多信息:

public static void bresenhamSphere(Vector3 centre, int radius)
    {
        List<Vector3> points = new List<Vector3>();
        foreach (Point coord in bresenhemCircle(new Point(0,0), radius)) //get the set of points for an initial bresenham circle centred at the origin (we'll add the coordinates later)
        {
            int z = coord.Y; //I think you should be able to pick which coord matches to Z and which matches to radius arbitrarily, but this was more intuitive
            int r = coord.X; //the radius for the new circles
            foreach(Point point in bresenhemCircle(new Point((int)(centre.X),(int)(centre.Y)), r)) //get the circle spans around the original circle, this will make the surface of the sphere - this time create them at the x and y coordinates of the centre point supplied in the parameters
            {
                points.Add(new Vector3(point.X, point.Y, (int)(centre.Z) + z)); //convert the 2D results into 3D points by adding in the z value and add to the list.
            }
        }
    }

其中 Bresenham Circle(center, radius) 返回由提供的圆心和半径形成的圆的圆周上所有像素的坐标。

其中 Bresenham Semi Circle(center, radius) 返回由提供的中心和半径形成的半圆圆周上所有像素的坐标。

一项额外的增强功能是不添加新圆圈上的初始点,因为我们已经从原始圆圈运行中获得了这些初始点,但我不确定其中有多少好处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有效地在体素中绘制球体表面? 的相关文章

  • 这段用于确定圆和线段是否相交的代码正确吗?

    显然很难找到一条线是否存在的答案segment和圆相交 例如 如果你用谷歌搜索 你会发现这个问题 https stackoverflow com questions 1073336 circle line segment collision
  • 对一系列点重新采样

    我有一个 3d 点数组 想象一下球的轨迹 有 X 个样本 现在 我想对这些点重新采样 以便我有一个新数组 其中包含 y 个样本的位置 y 可以大于或小于 x 但不能小于 1 始终至少有 1 个样本 将原始数组重新采样为新数组的算法会是什么样
  • 如何使用 start 和 endAngle 渲染 svg 圆

    我使用 start 和 endAngle 渲染了 svg 圆 效果很好 但是当我渲染完整的圆 startAngle为70 endAngle为70 时 输出有很大的不同 0 90 180 270除外 我为这段代码做错了什么 function
  • WPF 3D 旋转球体 GUI

    我一直在尝试在 WPF 中为我的课堂作业制作 3D 用户界面 但遇到了一个问题 现在 2 3 天都无法解决 我尝试用谷歌搜索答案 我查看了一些 stackoverflow 帖子 但还没有一个可以帮助我解决问题 情况是这样的 我有一个 3D
  • 如何检测两条线段相交的位置? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 不均匀圆盘的最佳覆盖

    What kind of algorithm can I use to search for an optimal minimum area covering of a limited region of the XY plane with
  • 边界椭圆约束于水平/垂直轴

    背景 我正在尝试将地形图裁剪成围绕多个风力涡轮机的最小尺寸椭圆 以最小化地图的尺寸 执行此地图裁剪的程序可以裁剪椭圆 但仅限轴沿 x 轴和 y 轴对齐的椭圆 我知道边界椭圆问题的算法 https stackoverflow com ques
  • 在iOS开发中,使用Core Graphics和/或Quartz 2D,如何绘制一个充满渐变的圆,使其看起来像一个球体?

    到目前为止 我已经研究过使用 CGContextDrawLinearGradient 和 CGContextDrawRadialGradient 但是 对于前者 我无法弄清楚如何使渐变看起来像球体 对于后者 我无法弄清楚如何使渐变成球体形状
  • 二维几何:如何检查点是否在角度内

    我有以下二维几何问题 我有一个点 从该点投射一个无限角度 2D 锥体 该角度由方向和角度给出 该点和方向形成一个向量 并且角度的每一侧一半形成 2D 锥体 现在我想检查 2D 中的另一个点是在这个圆锥体内部还是外部 如何才能实现这一目标 谢
  • 查找二维空间中圆内的所有点

    我表示我的 2D 空间 考虑一个窗口 其中每个像素显示为 2D 数组中的一个单元格 即 100x100 的窗口由相同维度的数组表示 现在给定窗口中的一个点 如果我画一个半径的圆r 我想找到该圆圈中的所有点 我想我应该检查半径周围方形区域中的
  • 按度数在圆上找到一个点?

    假设我们有一个 100x100 坐标系 如下所示 0 0 是它的左上角 50 50 是它的中心点 100 100 是它的右下角 等等 现在我们需要从中心向外画一条线 我们知道线的角度 但需要计算其终点的坐标 您认为最好的方法是什么 例如 如
  • 确定解决迷宫问题的最小线段数

    我有一个问题 我需要定义一个具有最少数量的顶点的多边形 该多边形与不透明的图像中的每个像素相交或包含每个像素 令 N 为图像中的像素数 我唯一的假设是图像的边界 孔 内不能包含透明像素 并且至少有两个像素是不透明的 举个例子 假设我有以下图
  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • 加快Python中一个点是否处于某个形状的顺序检查

    我有一个代码 用于顺序确定是否在我的中找到每对笛卡尔坐标DataFrame落入某些几何封闭区域 但我怀疑它相当慢 因为它不是矢量化的 这是一个例子 from matplotlib patches import Rectangle r1 Re
  • 多边形内的 SQL 地理点在 STIntersect 上不返回 true(但使用 Geometry 返回 true)

    我不想仅仅为了在 STIntersect 中返回 true 而将地理数据转换为几何图形 下面是 SQL 中的代码 DECLARE point GEOGRAPHY GEOGRAPHY Point 1 1 4326 DECLARE polygo
  • WPF - 路径几何...有没有办法绑定数据属性?

    我有一个ControlTemplate作为 气泡 弹出窗口AdornerLayer给定的控制 它工作正常 但我需要能够计算它应该显示的位置 中间 底部 代替
  • 快速计算三角形与单位正方形的交面积

    在我当前的项目中 我需要计算无限网格中三角形和单位正方形的交集面积 对于每个三角形 由三对浮点数给出 我需要知道面积 在区间内 0 1 它与它相交的每个正方形都有共同点 现在我将两者 三角形和正方形 转换为多边形并使用Sutherland
  • WPF 3D - 在复杂几何体上映射渐变画笔

    我想问是否有人知道如何在 WPF 3D 中的复杂对象上映射渐变画笔 结果应该类似于 matlab 中的 3D 图像 例如 3D 函数 假设您有一些想要可视化的 3 维数据 并且想要通过颜色区分某些级别的值 给定一个 GradientBrus
  • 使用 JSTS 缓冲区识别自相交多边形

    我希望能够通过 JSTS 无法构造自相交多边形或通过添加缓冲区并在缓冲后测试它们是否是多重多边形来测试自相交多边形 但对于某种形状 这是行不通的 这远远超出了我的几何能力格罗克 a self intersecting shape var p
  • 几何:找到两点之间特定距离的点

    这类似于这个问题 https stackoverflow com questions 328107 how can you determine a point is between two other points on a line se

随机推荐