如何栅格化球体

2024-02-23

所以,我试图创建一个外部有“块”的球体,有点像在 Minecraft 中构建的。 (我不知道圆的外部的术语是什么)。问题是,我不知道如何让像中点圆算法这样的方程适用于球体。最好是在 lua 或 java 中,这样我可以更轻松地阅读任何答案。我不想知道如何用三角函数计算球体上的点,我已经知道该怎么做了。


我认为最简单的方法就是将中点圆算法扩展到 3D。

首先,让我们弄清楚我们要填充哪些块。假设原点位于块的中间(0,0,0)和半径R:

  1. 我们只想填充球体内的盒子。这些正是盒子(x,y,z)这样x²+y²+z² <= R²; and
  2. 我们只想填充能显示脸部的盒子。如果一个盒子有一张脸,那么至少有一个邻居是not在球体中,所以:(|x|+1)²+y²+z² > R² OR x²+(|y|+1)²+z² > R² OR x²+y²+(|z|+1)² > R²

这是第二部分,让它变得棘手,但请记住这一点(|a|+1)² = |a|² + 2|a| + 1。如果说,z is the largest球体内部盒子的坐标,如果该盒子有一个面显示,那么z尤其是脸部会被暴露出来,因为x²+y²+(|z|+1)² = x²+y²+z²+2|z|+1,并且该值至少与类似值一样大x and y.

因此,很容易计算 1) 在球体内部,2) 有的盒子z作为它们的最大坐标,并且 3) 具有最大可能的 z 值,即,将 1 添加到 z 会导致球体外部出现一个框。此外,4)对所有人都有积极的价值x,y,z.

然后可以通过 24 种不同的方式反映这些盒子的坐标,以生成球体表面上的所有盒子。这些是坐标符号的所有 8 种组合乘以轴具有最大坐标的所有 3 个选项。

以下是如何生成正数点x,y,z and z最大:

maxR2 = floor(R*R);
zx = floor(R);
for (x=0; ;++x)
{
    //max z for this x value.
    while(x*x+zx*zx > maxR2 && zx>=x)
        --zx;
    if (zx<x)
        break; //with this x, z can't be largest

    z=zx;
    for(y=0; ;++y)
    {
        while(x*x+y*y+z*z > maxR2 && z>=x && z>=y)
            --z;
        if (z<x||z<y)
            break; //with this x and y, z can't be largest
        FILLBOX(x,y,z); //... and up to 23 reflections of it
    }
}

注意:如果这对您很重要,请在计算反射时小心,以免绘制,例如,(0,y,z) and (-0,y,z),因为这是同一个盒子两次。也不要交换具有相同值的轴,因为这又会绘制同一个框两次(例如,如果您有(1,5,5),不交换y and z并再次绘制。

另请注意R不一定是整数。如果再加0.5,看起来会好一点。

这是一个考虑了上述所有内容的示例(您需要支持 webgl 的浏览器)https://jsfiddle.net/mtimmerm/ay2adpwb/ https://jsfiddle.net/mtimmerm/ay2adpwb/

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

如何栅格化球体 的相关文章

  • 计算移动的球与移动的线/多边形碰撞的时间(2D)

    我有一个多边形 里面有一个移动的球 如果球撞到边界 它应该反弹回来 My current solution I split the polygon in lines and calculate when the ball hits the
  • 为什么 Math.Round 不返回 int? [复制]

    这个问题在这里已经有答案了 在 C 中 为什么舍入数学函数 Floor Ceiling 和 Round 不返回int 考虑到函数的结果始终是整数 为什么它返回一个float double or decimal double has the
  • 为 javascript 编写一个真正具有包容性的随机方法

    Javascript MATH 对象有一个随机方法 该方法从集合 0 1 返回 0 含 0 1 不包括 有没有办法返回一个真正随机的方法 其中包括 1 e g var rand MATH random 2 if rand gt 1 rand
  • 计算机如何评估巨大的数字?

    例如 如果我输入一个值 1234567 98787878 Wolfram Alpha 可以为我提供许多细节 这包括小数近似 总长度 最后一位数字等等 您如何评估如此大的数字 据我了解 编程语言必须具有特殊的数据类型才能存储数字 更不用说将其
  • RNG 技术的可移植性和可重复性

    我可以使用两种方法之一来创建一个伪随机数序列 该序列具有两个重要特征 1 它可以在不同的机器上重现 2 该序列永远不会重复范围内的数字 直到所有数字都被发出 我的问题是 这两种方法在可移植性 操作系统 Python 版本等 方面是否存在潜在
  • 如何在 C# 中将 BigInteger 转换为 pow Double?

    我尝试使用BigInteger Pow计算类似 10 12345 987654321 的方法 但此方法只接受整数作为指数 如下所示 BigInteger Pow BigInteger x int y 那么如何在上述方法中使用双数作为指数呢
  • 小数纬度/经度的最大长度 度?

    地球表面一度纬度和经度的最大长度是多少 以公里或英里为单位 但请注明 我不确定我是否说得足够清楚 让我重新表述一下 众所周知 地球不是一个完美的圆 赤道 或厄瓜多尔 纬度 经度变化 1 0 可能意味着一个距离 而两极的相同变化可能意味着另一
  • 哪种编程语言或库可以处理无限级数?

    哪种编程语言或库能够处理无限级数 例如几何级数或调和级数 它可能必须有一些众所周知的系列的数据库 并在收敛的情况下自动给出适当的值 并且可能在发散的情况下生成异常 例如 在 Python 中 它可能如下所示 sum 0 sign 1 0 f
  • 将所有 BigDecimal 运算设置为特定精度?

    我的Java程序以高精度计算为中心 需要精确到至少120位小数 因此 程序中所有非整数都将由 BigDecimal 表示 显然 我需要指定 BigDecimal 的舍入精度 以避免无限小数表达式等 目前 我发现必须在 BigDecimal
  • 在现代 x86-64 上计算 64 位整数的整数 Log10 的最快方法是什么?

    标题 我找到了大量 32 位示例 但没有找到完整的 64 位示例 使用这个帖子 https codegolf stackexchange com questions 47290 fastest way to compute order of
  • Python OverflowError:数学范围错误[重复]

    这个问题在这里已经有答案了 当我尝试这个计算时 出现溢出错误 output math exp 1391 12694245 100 我知道发生这种情况是因为使用的数字 超出了双精度数的范围 但有什么方法可以解决这个问题并获得输出值 有人可以帮
  • 以编程方式分解大量数字

    好吧 所以我有一个巨大的数字f 实际上 这个数字只有 100 多位数字长 我知道这些因子的大小大致相同 如果我的资源和时间有限 我应该使用什么语言和算法 我包括在限制时间内编写算法的时间长度 想法 编辑 我所说的有限是指在尽可能短的时间内
  • 在 Python 中使用 sec 函数的反函数

    我正在创建一个程序 用于计算从一定高度范围和设定初始速度发射射弹的最佳角度 在我需要使用的最终方程中 存在一个反 sec 函数 它导致了一些麻烦 我已经导入了数学并尝试使用 asec 无论如何 但是数学似乎无法计算反秒函数 我也明白 sec
  • NSArray 中不重复的所有可能组合

    假设我有一个包含 3 个数字的数组 NSArray array 1 2 3 我想进行所有组合而不重复 所以我需要的是这样的 1 2 3 1 2 2 3 1 3 1 2 3 我当前的代码是这样的 NSArray array 1 2 3 int
  • 如何计算具有较大中间值的总和

    我想计算 for n m两个值都是 1000 以内的整数 最终结果是一个不大于 1000 的数字n但中间值对于 python 来说太大了 无法处理 你怎么解决这个问题 我将函数定义如下 from scipy misc import comb
  • 为什么反向传播神经网络中必须使用非线性激活函数? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在阅读一些有关神经网络的内容 并且了解单层神经网络的一般原理 我理解需要额外的层 但为什么要使用非线性激活函数 这个问题后面跟着这个
  • 有没有办法根据值是大于 0.5 还是小于 0.5 来进行下限/上限?

    我正在尝试舍入我的价值观 以便如果它是0 5或更大 则变为1 否则就变成0 例如 3 7 gt 4 1 3 gt 1 2 5 gt 3 有任何想法吗 Math Round 3 7 MidpointRounding AwayFromZero
  • 使用矩阵代数来操作字符串:可行吗?

    我正在尝试使用矩阵代数来操作字符串 这意味着能够使用字符串或字符串数 组的串联和粘贴来实现多个类似矩阵的结构 我之前尝试在 R 上实现这个东西 但这是不可能的 因为矩阵只能有一维条目 我希望足够的与语言无关和抽象 但为了清楚起见 我将使用类
  • 在 C 中如何安全地找到 2 个有符号整数之间的绝对差?

    绝对差是两个数字之间差的绝对值 假设我有 2int变量 x and y 我想找到绝对差异 一个简单的解决方案是 unsigned diff abs x y 然而 如果发生溢出 这些会调用未定义的行为并给出不正确的结果 例如x is INT
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅

随机推荐

  • Windows Phone 8.1 运行时文本大纲

    Is there a way to show text outline on a TextBlock I am showing some text on top of map control and would like to show t
  • MinMax 树 - 当 Min 可以两步获胜时

    因此 我一直在尝试使用最小最大树来在两人棋盘游戏中创建一个简单的计算机玩家 我了解该算法的基础知识 但有一种情况让我的火鸡大脑无法理解 当 MIN 可以通过两步获胜时会发生什么 例如 假设在 connect4 tic tac toe 类型的
  • Python 中的比较运算符与“丰富比较”方法

    有人可以向我解释一下两者之间的区别吗 这些通常是等价的吗 也许我在这里完全错了 但我认为每个比较运算符都必然与一个相关 丰富的对比 方法 这是来自文档 运算符号与方法名的对应关系如下 如下 x
  • 导出为库时扩展类方法不可用

    我正在尝试构建一个java库 streaming client jar 并在客户端微服务中使用它 在这个 jar 文件中 我有一个 POJO 类 它扩展了第三方 POJO 类 ConditionalOnClass Options class
  • Apache commons -> 文件上传 -> parseRequest() 错误

    Apache 在尝试上传文件时返回此错误 我只保留了堆栈跟踪的第一行和根本原因 HTTP Status 500 type Exception report message description The server encountered
  • BitmapFactory.decodeResource 位图不是原始大小(以像素为单位)

    我有这段代码可以裁剪图像表的一部分 问题是当我使用BitmapFactory decodeResource并且当记录宽度和高度时 尺寸与原始尺寸不一样 Bitmap spriteSheet BitmapFactory decodeResou
  • didSelectItemAtIndexPath 在集合视图 Swift 中不起作用

    我一直在开发一个新的应用程序 它在集合视图中显示 Gif 我还为集合视图中的单元格使用自定义集合视图单元格类 方法didSelectItemAtIndexPath虽然不起作用 func collectionView collectionVi
  • 如何保护在 playframework 中开发的 REST api 的安全

    我在这里和其他文章上读到了很多关于这方面的内容 首先让我解释一下我的情况 假设我有以下 REST 后端 GET user以 JSON 格式返回所有用户 无需登录 POST user注册新用户 无需登录 DELETE user删除一个用户 你
  • Firebase 设置数据结构

    您好 我想知道在使用 Firebase 控制台时是否有办法强制使用数据库结构 例如 我需要添加一个名称为 Sample 且值 3的对象 然后当我想添加另一个对象时 我只能插入具有相同结构 名称和值 的对象 有什么办法可以实现这一点吗 使用
  • 合并两个 HTML 表格单元格

    我正在 HTML 中创建一个表格 我希望顶部单元格的宽度为 2 这是一个粗略的图 HEADER CONTENT CONTENT
  • Paypal 支付页面布局在 webview android 中损坏,也许 css 未正确加载?

    正如卡德维尔在他的问题中提到的 Paypal 支付页面布局在 webview android 中损坏 https stackoverflow com questions 23405919 paypal payment page layout
  • InitMUILanguage() 与 MessageBox()

    我有 MUI C 应用程序使用InitMUILanguage https msdn microsoft com en us library windows desktop bb775699 v vs 85 aspx and SetProce
  • 如何让AltBeacon库的BootstrapRegion识别iBeacon布局?

    我正在使用参考 http altbeacon github io android beacon library samples html http altbeacon github io android beacon library sam
  • 静态方法中的局部变量和线程安全

    我有一个关于变量范围的问题 例如 class A private static void test do something with local variables 现在我创建两个线程 并创建一个实例A对于每个线程 当我打电话时test
  • Win32 更改为二进制模式子级的标准输出(管道)

    你好 这个伟大的社区 我在自动转换时遇到问题 n 0x0A to n r 0x0D 0x0A当使用管道将子级的标准输出重定向到文件时 子级的输出是字节并且not text 首先 我使用了这些例子MSDN 创建具有重定向输入和输出的子进程 h
  • 向巧克力之神发出嘘声

    Update 该实用程序用于帮助配置Git通过我正在观看的经过认证的 Microsoft Visual Academy MVA 视频 当我通过 Chocolatey 安装软件包时收到一个奇怪的错误 我已上传命令提示符 指向 Chocolat
  • spamassassin 检查分数 C# 代码

    有没有办法检查 ASP Net 应用程序中的分数 Net 的类或类似的东西 其他垃圾邮件过滤器怎么样 编辑 我正在寻找一种方法来检查 C 中电子邮件的垃圾邮件分数 这是我超级简化的 只需检查分数 代码 用于连接到我为 C 编写的正在运行的垃
  • 使用 Yammer 嵌入和开放图设置默认目标组

    我正在使用Yammer 嵌入 https developer yammer com connect 外部 Web 应用程序中的 JavaScript 控件 我想使用开放图功能 以便将所做的评论链接回创建它们的页面 这一切都非常简单 但我的问
  • 如果安装了 .Net 4.5,如何保持 .Net 4.0 行为?

    我们有一个面向 Net Framework 4 0 的 Windows 窗体应用程序 安装 Net Framework 4 5 后 应用程序开始崩溃 我们必须调查崩溃事件 并且很可能必须修复我们这边的问题 但是 在我们准备好使用 Net 4
  • 如何栅格化球体

    所以 我试图创建一个外部有 块 的球体 有点像在 Minecraft 中构建的 我不知道圆的外部的术语是什么 问题是 我不知道如何让像中点圆算法这样的方程适用于球体 最好是在 lua 或 java 中 这样我可以更轻松地阅读任何答案 我不想