获取线段和 2^n 网格之间的所有交点(以整数表示)

2023-12-28

我有一条从 (x0, y0) 到 (x1, y1) 的线,穿过由 2^n 宽的方形瓷砖组成的网格。我不仅需要找到线相交的图块,还需要找到相应的入口点和出口点。我可以找到所有关于此的问题都涉及“1x1”图块,而不关心图块内交叉点的位置。

这些点并不总是精确地为整数,在某些情况下,我会使用自然下限,而在其他情况下,我会进行四舍五入。但就目前而言,在所有情况下让它自然下降就可以了。

我找到了一个例子 http://playtechs.blogspot.com/2007/03/raytracing-on-grid.html最终得到一个非常简单的整数光线追踪情况,但它不跟踪交点,也不适用于除了穿过 1x1 图块中心(假设 0.5、0.5 偏移)的线之外的任何内容。

void raytrace(int x0, int y0, int x1, int y1)
{
    int dx = abs(x1 - x0);
    int dy = abs(y1 - y0);
    int x = x0;
    int y = y0;
    int n = 1 + dx + dy;
    int x_inc = (x1 > x0) ? 1 : -1;
    int y_inc = (y1 > y0) ? 1 : -1;
    int error = dx - dy;
    dx *= 2;
    dy *= 2;

    for (; n > 0; --n)
    {
        visit(x, y);

        if (error > 0)
        {
            x += x_inc;
            error -= dy;
        }
        else
        {
            y += y_inc;
            error += dx;
        }
    }
}

如何调整它来找到相交的 2^n x 2^n 网格图块,同时抓取 2 个相关的交叉点?似乎在图块中“任何地方”开始的能力确实搞乱了这个算法,我的解决方案最终使用除法,并且可能设置为在每次迭代中累积错误。而且这样也不好...

另外,我认为对于第一个和最后一个图块,可以假设端点是“其他”交点。


有一篇有用的文章“快速体素遍历算法... http://www.cse.yorku.ca/~amana/research/grid.pdf” 作者:Woo,Amanatides。 看看实际的实现(网格遍历部分 http://www.flipcode.com/archives/Raytracing_Topics_Techniques-Part_4_Spatial_Subdivisions.shtml) 也。 我用过这个方法,效果很好。

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

获取线段和 2^n 网格之间的所有交点(以整数表示) 的相关文章

  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反

随机推荐

  • 正确使用PropertyChangedTrigger和ChangePropertyAction

    我正在尝试设置默认选定值ItemsSource我的财产变化ComboBox 我的xaml
  • onServiceConnected 在bindService 方法之后从未调用

    我有一个特殊情况 由广播接收器启动的服务启动一个活动 我想让此活动能够与服务进行通信 我选择使用 AIDL 来使其成为可能 一切似乎都很好 除了bindService 调用的方法onCreate 的活动 实际上 bindService 会抛
  • Java中用多个子类实现父类方法

    我有一堂课 我们称之为A 由几个子类扩展 B C D ETC 在每个子类中 我希望可以从父类的实例化中访问特定的方法A 我试图声明A作为抽象类 并将内部的每个子类方法声明为抽象类 然后我在自己的类中实现了这些方法 但似乎每个子类都必须实现父
  • Vanilla javascript Trap 模式中的焦点(辅助功能选项卡)

    这应该很简单 但由于某种原因它不起作用 我在正确的时间获得了正确的 console logs 但焦点没有到达正确的位置 请参考我的 jsfiddle https jsfiddle net bqt0np9d https jsfiddle ne
  • 使用 XPath Java 设置节点值

    我正在尝试通过 XPath 设置节点值 我有以下内容 但它似乎没有改变实际文件值 XPathFactory factory XPathFactory newInstance XPath xPath factory newXPath xPat
  • 如何在 DynamoDB 中创建 UUID?

    在我的数据库方案中 我需要一个自动增量主键 我怎样才能实现这个功能呢 PS 为了访问 DynamoDB 我使用dynode https github com Wantworthy dynode Node js 模块 免责声明 我是 Dyna
  • 如果空间不足,则隐藏标签 D3 可缩放旭日图

    所以我知道这个答案是为了隐藏不适合图表的文本 D3 如果有足够的空间 在饼图中放置圆弧标签 https stackoverflow com questions 19792552 d3 put arc labels in a pie char
  • 似乎无法清理分离的 DOM 元素

    我在用着jquery ui 选项卡 http jqueryui com tabs 我遇到了删除选项卡时出现的问题 该选项卡及其内容 div 似乎已被删除 但当您查看 Chrome DevTools 配置文件中的堆时 删除选项卡后 您会发现选
  • 相当于 Scala dropWhile

    我正在努力寻找一种方法来根据谓词跳过流开头的某些元素 像这样的事情 dropWhile n gt n lt 3 Stream of 0 1 2 3 0 1 2 3 4 forEach System out println 3 0 1 2 3
  • 通过浏览器后退按钮访问时重新加载网站

    问题 我有一个包含动态内容的网站 每次用户看到它时都需要重新加载 这包括当用户点击另一个站点上的后退按钮并到达需要重新加载的站点时的用例 大多数 全部 浏览器在此事件后不会刷新网站 我的解决方案 不太有效 http www hunlock
  • C++ 异常处理

    所以我正在编写一些代码 我注意到除了语法 类型和其他编译时错误之外 C 不会抛出任何其他异常 所以我决定用一个非常简单的程序来测试一下 include
  • 列表视图设置自定义波纹选择器

    我尝试在以下条件下在 Lollipop 上使用列表视图控件 主题类型是默认的Theme Material 深色主题 列表视图包含在具有白色背景的较大布局内 列表视图应该有一个以白色背景出现的列表选择器 注意 我被迫使用自定义列表选择器颜色
  • Python 换出 sys.modules 并不像直觉那样工作

    我正在尝试设置字典sys modules在寻找答案时另一个问题 https stackoverflow com q 42134260 2988730并发现了一些有趣的事情 链接的问题涉及消除导入模块的所有影响 基于另一个帖子 https s
  • 如何在 Java 单例中维护可变状态

    我有一个 Java 中的单例 在 OSGi 服务中 并且想要维护其中的某些状态 计数器 这个变量应该是静态的吗 或同步 或两者 或者我应该将操作包装在同步方法中 这与仅仅使 var 同步有什么不同吗 我希望服务操作的消费者增加此计数器 pu
  • WPF 中的水平菜单和水平子菜单

    我一直在与 WPF 作斗争Menu我根本无法实现我想要的目标 我尝试更改默认样式Menu and MenuItem控制 但这结果很糟糕 然后我尝试使用控件模板来设计它的样式 但是 我想我开始意识到我的 WPF 技能还不具备 这是我想要的结果
  • XAML WebView 绑定到字符串在 Xamarin Forms 中不起作用

    我是 C 和 Xamarin Forms 的新手 我有一个 webview 并从 API 获取源 url 对于这个问题 我已经对值进行了硬编码 我绑定了源 url 而不是将值添加到 XAML 中的 Source 但这不起作用 堆栈和论坛中的
  • 如何在java中读取或解析MHTML(.mht)文件

    我需要开采content大多数已知的文档文件 例如 pdf html 文档 docx等 对于大多数文件格式 我计划使用 http tika apache org http tika apache org 但截至目前Tika不支持 MHTML
  • 如何重置/清除 erlang 终端

    我正在尝试重置提示 忘记所有变量并从第 1 行开始提示 gt 我知道以下内置函数 f forget all io format e H e J clear screen and moving cursor to the begin of t
  • Intellij IDEA无法导入两个包含同名子模块的gradle项目

    我有两个 gradle 项目 projectA 子模块 projectB 子模块 两个子模块具有相同的名称 但组 ID 不同 当我尝试将两个项目导入到 IDEA 中的同一工作区时 它正确导入一个项目 根模块 子模块 并且仅导入第二个项目的根
  • 获取线段和 2^n 网格之间的所有交点(以整数表示)

    我有一条从 x0 y0 到 x1 y1 的线 穿过由 2 n 宽的方形瓷砖组成的网格 我不仅需要找到线相交的图块 还需要找到相应的入口点和出口点 我可以找到所有关于此的问题都涉及 1x1 图块 而不关心图块内交叉点的位置 这些点并不总是精确