- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在寻找一种方法来检查矩形的集合 (Java TreeSet) - 由一个“可比较的”Java 类实现,使用 google guavas Range for x 和 y range - 交叉点和孔。我知道可以选择使用 kd-trees,但我不知道如何构建这样的 kd-tree(对于矩形,它应该是 4d,不是吗?)以及如何解决问题(交叉点,洞)。
排序使 x 轴优先于 y 轴。
编辑:(尝试重述问题):用例是创建任意表(由 2 或 3 个矩形 block “标题”、“前列”、“数据”组成) .我必须保证每个 block 中没有交叉点和孔(即由无效的 html 或其他表格数据源提供)(除此之外, block 必须放在一起)。目前(只是有一个想法)我试图在一个二维数组中保存哪些位置(x,y)被占用。最后,所有位置必须恰好被占用一次。
最佳答案
解决此类问题的方法有很多种,每种方法各有利弊。以下是其中一些:
矩形对交集 + 面积和
查看每一对矩形 - 如果两个矩形相交,则存在重叠。将矩形区域相加并检查总和是否与 Canvas 区域匹配 - 如果区域不匹配,则存在间隙。
绘画
这就是您提到的方法:创建一个具有 Canvas 尺寸的二维数组。然后,遍历矩形并将它们“绘制”到数组中。
此方法的一个优化是坐标压缩。假设您有矩形 [(10,20), (15,25)] 和 [(7,3), (15, 25)]。您可以查看不同的 x 坐标 (7, 10, 15) 并将它们重新映射到 (0, 1, 2),以及不同的 y 坐标 (3, 20, 25) 并将它们重新映射到 (0, 1, 2).然后,剩下矩形 [(1, 1), (2, 2)] 和 [(0,0), (2,2)],所以你只需要一个 3x3 数组来绘制,而不是 26x26数组。
扫描线算法
从左到右扫描一条线,停在“有趣”的点,并跟踪哪些区域被占用。
二维范围树
一种可以在矩形范围内高效执行查询的数据结构。
选择哪一个?
这取决于你拥有的矩形的数量,它们在该区域的分布方式,你的算法必须有多快,你愿意承担多少复杂性等等。我提到的前两个算法要简单得多而不是后两者,所以我建议从那里开始。
更多信息
如果您想详细了解这些算法,请尝试在线搜索“矩形联合”。最有效的解决方案是扫描线算法。
这里有一些关于扫描线算法的引用资料:
引用文献 3. 通常作为 rectangle union 的线扫描算法的原始来源给出,但我不得不承认我实际上并没有在网上找到这篇论文,也许是因为它是“未发表的”......
关于java - 如何检查一组矩形的孔洞和相互作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9295693/
我需要根据需要动态设置文本区域,但它不想正常工作。 JQuery 会自行检查,但无法检查是否已检查。但是当您在第二个单选框内单击时,始终需要文本区域。我尝试了很多次让它工作,但它仍然有问题。我添加了“
我需要在 Django 中进行 API 调用(某种形式),作为我们所需的自定义身份验证系统的一部分。用户名和密码通过 SSL 发送到特定 URL(对这些参数使用 GET),响应应该是 HTTP 200
我将在我的可移植 C 代码中使用 #warning 来生成编译时警告。但并非所有平台都支持 #warning。有什么方法可以找到该平台是否支持 #warning。 #ifdef warning
我编写了一个函数来检查某个数字是否存在于某个区间内。停止搜索的最佳方法是什么?这个: for (i = a; i <= b; i++) { fi = f(i); if (fi == c) {
我想知道在 c 中是否有一种方法可以检查,例如在 for 函数中,如果变量等于或不等于某些字符,而不必每次都重复进行相等性检查。如果我没记错的话,以这种方式检查相等性是不正确的: if (a == (
我有如下日志功能 void log_error(char * file_name, int line_num, int err_code) { printf("%s:%d:%s\n", fil
使用 ssh-keygen 生成的 key 对在 macOS 上可以有不同的格式。 macOS 可读的标准 PEM ASN.1 对象 SecKey API 带有文本标题的 PEM OpenSSH ke
我正在尝试编写一个 excel if 语句。我不熟悉使用 Excel 具有的所有额外功能。我正在使用一个名为 importXML() 的函数.我正在尝试检查我正在使用的函数是否生成“#VALUE!”错
有没有办法检查是否没有 AIO 写入给定文件?我在我的 Unix 类(class)上制作了一个项目,该项目将是一个上下文无关(基于 UDP)的国际象棋服务器,并且所有数据都必须存储在文件中。应用程序将
我有一个如下所示的函数: public Status execute() { Status status = doSomething(); if (status != Stat
我正在使用 Composer,我不希望 PhpStorm 在 vendor 文件夹上运行任何错误检查或检查,因为它对 vendor/中的某些代码显示误报composer/autoload_static
Chapel 的一个很好的特性是它区分了数组的域和它的分布。检查两个数组是否具有相同的域和分布(通常想要的)的最佳方法是什么? 我能看到的最好的方法是检查 D1==D2和 D1.dist==D2.di
在我的 JavaScript 函数中,我为所有输入、文本区域和选择字段提供实际值作为 initial_value: $('input, textarea, select').each(function
我正在编写一个分解为几个简单函数的 PHP 类。在构造函数中,它调用另一个名为 processFile 的函数。该函数调用 5 个私有(private)函数并进行检查。如果检查失败,它会将消息分配给
这个问题已经有答案了: How to detect if user it trying to open a link in a new tab? (2 个回答) 已关闭 7 年前。 我认为 JavaS
我正在浏览我们的代码库并看到很多这样的测试: declare @row_id int = ... declare @row_attribute string select @row_attribu
我正在声明一个用作比较的函数。我的问题是: 为什么条件充当语句? 为什么第 4 行可以工作,而第 5 行却不行? 我知道这段代码不切实际且未使用,但为什么编译器允许这种语法? 谷歌没有找到答案。但话又
到目前为止,我有一个带有空文本字段的 PHP Kontaktform,并使用以下命令检查了所需的字段: $name = check_input($_POST['name'], "请输入姓名。"); 现
目前,我能想到的合理检查的唯一方法没有臃肿的逻辑: if ( $value > 0 ) { // Okay } else { // Not Okay } 有没有更好的办法? 最佳答案
我正在尝试运行一个脚本,如果 i 存在(意味着存在 i 值,任何值)或其他部分,我希望运行其中的一部分如果i没有值就运行,有人可以启发我吗? 我说的是 for 循环,比如 for (var i=0;
我是一名优秀的程序员,十分优秀!