![]() |
1
5
使用该示例,其中矩形彼此垂直,因此可以用四个值(两个X坐标和两个Y坐标)表示: 1 2 3 4 5 6 1 +---+---+ | | 2 + A +---+---+ | | B | 3 + + +---+---+ | | | | | 4 +---+---+---+---+ + | | 5 + C + | | 6 +---+---+ 1)将所有X坐标(左、右)收集到一个列表中,然后对其进行排序并删除重复项 1 3 4 5 6 2)将所有Y坐标(顶部和底部)收集到一个列表中,然后对其进行排序并删除重复项 1 2 3 4 6 3)通过唯一X坐标之间的间隙数*唯一Y坐标之间的间隙数创建二维阵列。它只需要每个单元一个比特,所以在C++中,vector & lt;BOOL & GT;很可能会给你一个非常有效的内存版本。 4 * 4 4)在网格中绘制所有矩形 1 3 4 5 6 1 +---+ | 1 | 0 0 0 2 +---+---+---+ | 1 | 1 | 1 | 0 3 +---+---+---+---+ | 1 | 1 | 1 | 1 | 4 +---+---+---+---+ 0 0 | 1 | 1 | 6 +---+---+ 5)对于网格中的每个单元,对于每个边,如果其旁边的单元在该基本方向上没有绘制,则为该边绘制边界线。 在这个问题中,矩形被描述为四个向量,每个向量代表一个角。如果每个矩形都可以任意旋转,并且与其他矩形的旋转方式不同,那么我上面概述的方法将不起作用。找到复杂多边形周围路径的问题通常由矢量图形光栅器解决,解决该问题的好方法是使用cairo之类的库来为您完成工作! |
![]() |
2
2
这个问题的一般解决方案是用扫描线实现布尔运算。你可以找到一个简短的讨论 here 开始吧。从文本中: 布尔算法的基础是扫描线。关于基本原则,本书: Computational Geometry an Introduction 弗朗哥P.普雷帕塔和迈克尔·伊恩·萨莫斯的作品非常出色。” 我拥有这本书,虽然它现在在办公室里,所以我找不到你应该读的页码,尽管第8章,关于矩形的几何可能是最好的起点。 |
![]() |
3
1
(从A和B得到重叠的矩形,取中间的2个x位置,以及中间的2个y位置) 示例(x1,y1)-(x2,y2):
计算:
这是我的可视化示例:
|
![]() |
4
0
一个简单的技巧应该是:
|
![]() |
5
0
经过一番思考,我可能最终会这样做: 伪代码:
很明显,这个伪代码需要改进一点,可能不能覆盖所有的情况,但我想我可能已经解决了我自己的问题。 |
![]() |
6
0
我还没有完全想清楚,但我想知道你是否不能做如下的事情:
你的矩形会一直水平对齐吗,如果不是的话,你需要做同样的事情,但对Y也一样? 他们是不是总是保证会触摸?如果不是这样,算法就不会被破坏,但是“正确的顺序”是不可定义的。 |
|
user20003920 · 如何对x y数据进行降采样? 11 月前 |
![]() |
John Marston · 如何创建三个角度相等的三维矢量? 1 年前 |
![]() |
Swike · 如何在matplotlib中为重叠的圆上色? 1 年前 |
![]() |
For · 如何使用c++中的=运算符分别分配复变量的实部和虚部? 1 年前 |
|
ryanx · html中的长lat标识符 1 年前 |
|
hosoo · 如何在python中找到平面方程 2 年前 |
|
Georgia Nissen · 检查两个列表的圆重叠 2 年前 |
![]() |
Tanvir Ahmed · 如何在圆周长上找到一定距离的点? 3 年前 |
![]() |
soleil · 根据角度找到正确的车轮段 3 年前 |