|
|
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也一样? 他们是不是总是保证会触摸?如果不是这样,算法就不会被破坏,但是“正确的顺序”是不可定义的。 |
|
|
Vojtjikjhh -4K- · 绘制光标问题 2 年前 |
|
|
FoolishMortal · 无法显示从基64字符串解码的特定图像 2 年前 |
|
|
Dromlius · JPanel透支重叠的JComcoBox 2 年前 |
|
|
mathInferno · 另一个OpenGL纹理未渲染后 2 年前 |
|
|
Pierro · 当我运行一个简单的SFML代码时,为什么像素会失真? 2 年前 |
|
|
Unknown · Were我能找到游戏横幅psd文件吗[关闭] 2 年前 |
|
|
se-tima · 如何绘制微生物学结果图(生长曲线)? 3 年前 |
|
|
user1944491 · 如何在静态基线上绘制SwiftUI矩形? 3 年前 |