基于正方形瓷砖直角三角形象限的坐标系中的边界框

2024-04-25

我正在为游戏创建一个基于图块的 2D 地形系统。然而,我还使用游戏中的坐标,需要能够将边界框映射到“图块坐标”中,并点击边界框接触的每个图块(不用担心,有一个 kd 树和所有工作)美好的)。使用定点“真实世界”坐标,我可以将每个图块计为 2^n 个,然后简单地右移这些位以截断为图块坐标。我使用最小的 x,y 对和最大的 x,y 对形成一个边界框。我会打电话给他们R0 and R1分别。

这是一个带有坐标的边界框R0: 0.8, 0.7 to R1: 2.2, 1.7被映射到图块上。

现在,这很简单。然而,我想将我的图块分成 4 个三角形象限,这让我可以制作更有趣的东西。由于每个图块变成 4 个三角形,我假设它们可以以某种方式由 2 位引用(不一定是我展示的那种)。我想使用尽可能少的位来“标记”这些三角形。我将把一个点的三角形标签放在其图块坐标旁边,以 [XX] 的形式,其中 XX 是指示它是哪个三角形的位。

但是,我在使用它时遇到了几个问题。我需要能够将现实世界的边界框坐标转换为“三角形坐标”,但似乎有损性太大,无法完全描述边界框。三角形区域中的相同坐标可以描述与不同三角形碰撞的边界框。

我在左侧有与之前相同的第一个边界框:R0: 0.8, 0.7 to R1: 2.2, 1.7
右边,我有一个新的边界框R0: 0.8, 0.3 to R1: 2.2, 1.7,因此左上角的 y 分量向上移动。它们都转换为相同的三角形坐标,但如果在现实世界坐标中完成,则会与不同的三角形发生碰撞。然而,三角形坐标中没有区别,因此数据会丢失并生成一组不正确的碰撞。

此外,同样的问题也发生在以同一三角形开始和结束的边界框上。相同的三角形坐标描述的边界框有时完全在该三角形内,有时则不在该三角形内。

必须有一种方法来映射这些,也许使用更多的位,以便在 kd 树范围查询中执行的所有三角形坐标比较都可以匹配现实世界边界框与现实世界坐标中的相同三角形的碰撞方式。但我不知所措。

我深入兔子洞创建“子图块”,将每个图块分成 4 个轴对齐的正方形,这也将每个象限图块沿其交叉的轴分成 2 个,因为我注意到很多情况是由于不知道其哪一侧而引起的我的坐标映射到的每个三角形。

但当我遵循一个又一个的例外来遵循更详细的规则时,我最终将我的子图块变成了相同的 4 个三角形象限设计,并最终回到了我开始的地方,除了较小的图块。

我只知道has能够实现这种“压缩”并进行适当的比较,但每当我尝试时,我都会继续原地踏步。如何做呢??

edit:
Alexey提出了一个解决方案 https://stackoverflow.com/questions/13731240/bounding-boxes-in-coordinate-system-based-on-right-triangle-quadrants-of-square/13733010#13733010这将允许我描述一个边界框,但它与使用 kd 树查找边界框重叠不兼容。使用我的 kd 树(存储左上角和右下角坐标)范围查询和搜索区域[x0, y0], [x1, y1]我进行范围查询:

[0, 0, x1, y1] to [x1, y1, xmax, ymax]

但即使我尝试补偿 8 维坐标,Alexey 的解决方案也不起作用。

我并不介意坐标系是否与我最初考虑的有所不同,只要它仍然可以与三角形象限表现出相同的结果。


似乎您需要的最小细分是将每个正方形细分为八分圆。每个正方形应被两条对角线以及水平和垂直中线划分。如果对于每个角落盒子的(不仅仅是左上角和右下角,而是所有四个)您存储在哪个图块的哪个八分圆中,您将有足够的信息来查找与所有原始三角形图块的碰撞(但不是与所有八分圆)。

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

基于正方形瓷砖直角三角形象限的坐标系中的边界框 的相关文章

  • 多维数组(如 C/C++ 中的数组)是不规则数组的特殊情况吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我和一个哥们讨论了C 和C多维数组是否是不规则数组的特例 一种观点是 多维数组不是参差不齐的数组 因为多维数组的每个元素具有相同的大小 在参差不齐的数
  • 三次贝塞尔曲线逆 GetPoint 方程:float for Vector <=> Vector for float

    给定结果值和四个点是否可以取回 float t 如果是这样 怎么办 public static Vector3 GetPoint Vector3 p0 Vector3 p1 Vector3 p2 Vector3 p3 float t t M
  • 比较周期性数据的快速方法

    假设我有任意类型的数据集 A B C D 并且我想将其与另一个数据集进行比较 我希望 A B C D B C D A C D A B 和 D A B C 的比较成立 但是不适用于 A C B D 或任何其他未类似排序的集合 有什么快速方法可
  • 如何解析代码(Python)?

    我需要解析一些特殊的数据结构 它们采用某种类似 C 的格式 大致如下所示 Group GroupName C Style comment Group AnotherGroupName Entry some variables 0 3 141
  • 用 ruby​​ 解决旅行商问题(50 多个位置)

    我在一家快递公司工作 目前 我们 手动 解决了 50 多个地点的路线 我一直在考虑使用 Google Maps API 来解决这个问题 但我读到有 24 点的限制 目前我们在服务器中使用 Rails 因此我正在考虑使用 ruby 脚本来获取
  • Android:如何获取小数点后的两位数?不想截断值

    如何获取小数点后仅两位数的双精度值 例如 如果 a 190253 80846153846 那么结果值应该像 a 190253 80 尝试 我尝试过这个 public static DecimalFormat twoDForm new Dec
  • LibGDX - 正确使用 Polygon 类

    我创造了Polygon包裹我的飞机的物体 飞机的大小TextureRegion是 256x74 但在游戏中这个尺寸是 70x20 所以 TextureRegion texRegsAirplane TextureRegion split te
  • 无痛“算法分析”培训? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在大学时曾有过一次关于 算法分析 课程的痛苦经历 但最近发现在大学中需要它真实世界 无论如何 我正在
  • 如何选择部分密集数据集的均匀分布子集?

    P是一个 n d 矩阵 持有nd 维样本 P某些地区的密度是其他地区的几倍 我想选择一个子集P其中任意样本对之间的距离大于d0 并且我需要将其传播到整个区域 所有样本都具有相同的优先级 无需优化任何内容 例如覆盖面积或成对距离之和 这是执行
  • `ImmutableSortedSet` 和 fsharp `Set` 有什么区别?

    BCL引入了一组Immutable Collections http blogs msdn com b bclteam archive 2012 12 18 preview of immutable collections released
  • 为什么在 Javascript 中添加两位小数会产生错误的结果? [复制]

    这个问题在这里已经有答案了 可能的重复 JavaScript 的数学有问题吗 https stackoverflow com questions 588004 is javascripts math broken 为什么 JS 搞砸了这个简
  • Postgis安装:类型“几何”不存在

    我正在尝试使用 Postgis 创建表 我按这个做page http postgis refractions net documentation manual 1 5 ch02 html id2619431 但是当我导入 postgis s
  • 获取无平方数的列表

    获得该值的一种方法是自然数 1 n 我们对每个因子进行因式分解 看看它们是否有重复的质因数 但这对于大的情况来说会花费很多时间n 那么有没有更好的方法从 1 中获取无平方数n 您可以使用埃拉托斯特尼筛法的修改版本 取一个布尔数组 1 n 预
  • O(mn) 比 O((m+n)^2) 更好吗?

    算法的输入是m and n 我的算法的时间复杂度是O mn 我有一个时间复杂度为的基准算法O m n 我的实现在时间复杂度方面是否优于基准 许多评论者和回答者希望只考虑以下情况 m n或者至少当它们通过一个常数因子相关时 这不是它的工作原理
  • Python:球体的交集

    我对编程非常陌生 但我决定承担一个有趣的项目 因为我最近学会了如何以参数形式表示球体 当三个球体相交时 有两个不同的交点 除非它们仅在一个奇点处重叠 球体的参数表示 我的代码是根据答案修改的Python matplotlib 绘制 3d 立
  • 如何找到最长的回文子序列(不是它的长度)

    我想找出字符串中最长的回文子序列 我到处都找到了找出子序列长度的算法 并声明该算法也可以扩展以返回子序列 但我没有找到如何实现的 有人能解释一下我怎样才能得到序列吗 既然你提到了链接最长回文子序列 http www geeksforgeek
  • 添加到数组连续数字

    这是我向SO提出的第一个问题 我希望能答对 在 PHP 中 如果你不会 Python 或伪语言也可以 给定一个包含 n 个元素的数组 old array 1 2 3 5 7 8 9 20 21 23 29 我需要向新数组添加连续数字 如果不
  • 如何在 dijkstra 算法中以 O(log n ) 时间更新优先级队列中的键?

    过去一周我一直在研究 dijkstra 算法 我在 java 中有正确的运行代码 它使用数组来计算标准 findMin 函数 该函数为您提供距离最小的顶点 显然它是 O n 现在我希望使用优先级队列 最小堆 来实现它 我的思考过程是 whi
  • 我想优化这个短循环

    我想优化这个简单的循环 unsigned int i while j 0 j is an unsigned int with a start value of about N 36 000 000 float sub 0 i 1 unsig
  • 如何使用KDTrees实现最近邻搜索?

    所以 我正在实施一个KD Tree http en wikipedia org wiki Kd tree进行最近邻搜索 我已经构建了树部分 但我认为我没有完全理解搜索部分 关于遍历树来搜索邻居 维基百科文章如下 Starting with

随机推荐

  • 学说迁移phar,如何设置类型映射?

    我想在我的非 symfony 项目中使用学说迁移 所以我从https github com doctrine migrations https github com doctrine migrations 我正确配置了所有内容 数据库配置和
  • Angular Reactive Forms 模式验证:正则表达式无效

    我在 AngularJS 网站上有一个用于澳大利亚电话号码验证的正则表达式 我在反应式表单验证器中设置了确切的模式 如下所示 Validators pattern 0 1 0 61 2 4 3 7 8 0 1 0 1 0 9 2 0 1 0
  • Bootstrap 3.0.2 中的面包屑导航栏

    我是 Bootstrap 的新手 我想创建一个带有一些内容 链接 下拉菜单 和面包屑的导航栏 但是当我将面包屑放入导航栏中时 我的显示有问题 块 我认为 这是我的示例代码
  • 瑞典 SSN 正则表达式拒绝特定年龄以下的用户

    我的正则表达式有问题 我已经可以验证正确的瑞典社会安全号码以符合这些标准 YYMMDDNNNN 年月日 NNNN 年年月日DDNNNN YYYYMMDD NNNN 但如果用户未满 18 岁 我也想拒绝该用户注册 我的常规表达现在是这样的 有
  • 如何在flutter中仅在一页上阻止屏幕截图?

    我想知道如何仅在一页上阻止颤振中的屏幕截图 我读到有一种方法可以阻止颤振应用程序中的屏幕截图 方法是 getWindow addFlags LayoutParams FLAG SECURE 但我的理解是 当我这样做时 整个应用程序中的屏幕截
  • 如何在Python中删除图像的背景

    我有一个包含全角人类图像的数据集 我想删除这些图像中的所有背景 只留下全角人物 我的问题 有没有Python代码可以做到这一点 我是否需要每次都指定人员对象的坐标 这是使用 Python OpenCV 的一种方法 读取输入 转换为灰色 阈值
  • plm 与 lfe 中的聚类标准错误不同

    当我运行集群标准错误面板规范时plm and lfe我得到的结果在第二个有效数字处有所不同 有谁知道为什么他们对SE的计算不同 set seed 572015 library lfe library plm library lmtest c
  • Swift 2.1 do-try-catch 未捕获错误

    这是我的 Swift 2 1 代码片段 发生的错误显示在错误出现处的注释中 错误显示在调试面板中 并且应用程序崩溃 该应用程序永远不会打印 catch 中的行 也不会按预期优雅地返回 let audioFileURL receivedAud
  • AngularJS 数据落后一步

    我正在使用 angularJS 跟踪地图坐标来更新数据 但是我遇到了一个奇怪的问题 即您在屏幕上看到的数据与console陈述 zombie controller move function scope io on location fun
  • Tensorflow:tf.get_collection 未返回范围内的变量

    我正在尝试获取变量范围内的所有变量 如所解释的here https stackoverflow com questions 36533723 tensorflow get all variables in scope 然而 该行tf get
  • 如何停止在 Visual Studio Code 中复制空白行上的空白?

    在 Visual Studio 代码中 如果您在空白行上按 ctrl c 且没有突出显示任何内容 则会复制该空白行 我认为可能有一个选项可以禁用此功能 但尚未找到它 您应该能够通过配置选项来做到这一点editor emptySelectio
  • 使用 echo 在 php 文件中输出 HTML 代码总是更好吗? [复制]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中回显 HTML 的最简单方法 https stackoverflow com questions 1100354 easiest way to echo html in php Hell
  • 对于实现相同特征的结构,如何克服类型不兼容的匹配臂?

    我正在尝试写cat命令来学习 Rust 但我似乎无法将命令行参数转换为阅读器结构 use std env io use std fs File fn main for arg in env args skip 1 let reader ma
  • Html 表格延伸到屏幕之外

    我有一张桌子 它从屏幕向右延伸 它已固定 并且该宽度大于屏幕宽度 浏览器自动在底部创建滚动条 在右侧的 不可见 区域中显示此表时 如何指示浏览器不创建滚动条 本练习的目的是使用 JavaScript 向左滚动该表 将其内容显示在最初位于屏幕
  • 了解 T-SQL 中的 PIVOT 函数

    我对 SQL 很陌生 我有一个这样的表 ID TeamID UserID ElementID PhaseID Effort 1 1 1 3 5 6 74 2 1 1 3 6 8 25 3 1 1 4 1 2 23 4 1 1 4 5 6 8
  • 以编程方式将提醒添加到“提醒”应用程序

    我正在创建一个简单的笔记应用程序 我想实现提醒 用户可以输入一条注释 点击一个按钮 然后它就会使用文本在 提醒 应用程序中设置提醒 这可能吗 如果可以 我该怎么做 我看过 Apple 关于 EventKit 和 EKReminders 的文
  • 如何在 LINQ 中的子表上创建 where 条件

    这是对此的回应question https stackoverflow com questions 315966 how do you construct a linq to entities query to load child obj
  • 我应该明确地与 None 进行比较吗

    我有一个相对简单的Python代码 import threading class Foo def init self self thread None def start self self thread threading Thread
  • 垂直对齐 DIV

    假设我有 2 个 DIV 一个在另一个之上 如何将顶部文本与 TOP 对齐 并将底部文本与 Bottom 对齐 True 垂直对齐仅在您设置display每个div到table cell div top div bottom display
  • 基于正方形瓷砖直角三角形象限的坐标系中的边界框

    我正在为游戏创建一个基于图块的 2D 地形系统 然而 我还使用游戏中的坐标 需要能够将边界框映射到 图块坐标 中 并点击边界框接触的每个图块 不用担心 有一个 kd 树和所有工作 美好的 使用定点 真实世界 坐标 我可以将每个图块计为 2