我试图复制一幅简单的"画作"程序使用由字典组成的基于列表的画布,字典表示矩形。我是不一个优秀的算法程序员,所以请耐心等待。
首先,画布为20 x 6单位。
每个"矩形"字典有4个坐标。
{ 'x1': 1, 'x2': 10, 'y1': 1, 'y2': 3 }
我可以确定矩形的坐标范围是否与其他坐标重叠很容易:
def determine_range_overlap(self, r1_min, r1_max, r2_min, r2_max):
if (r1_min <= r2_max) and (r2_min <= r1_max):
# get the coordinates that overlap
coordinates = list(set.intersection(set(range(r1_min, r1_max + 1)), set(range(r2_min, r2_max + 1))))
if coordinates:
return coordinates[0], coordinates[-1]
return None, None
但我遇到麻烦的地方是确定在这种情况下是否有一个单一维度的矩形,也就是一条线,水平线:
{ 'x1': 10, 'x2': 20, 'y1': 3, 'y2': 3 } # both y values are equal
与画布的边相交以创建矩形的可视化表示。例如:
----------------------
| |
| |
| |
|1111111111 |
| 2 |
| 2 |
----------------------
我想创建一个fill
方法来添加一个&#34;颜色&#34;对于矩形中的每个点,指定的X,Y都在其中。
在这种情况下,如果有一个可视矩形,并且有人点击了背景,我需要这个结果。 &#34; C&#34;代表颜色填充:
----------------------
|cccccccccccccccccccc|
|cccccccccccccccccccc|
|cccccccccccccccccccc|
|1111111111cccccccccc|
| 2cccccccccc|
| 2cccccccccc|
----------------------
我目前正在保留一个添加到画布的每个矩形的列表,但是如何处理相交的线条并触摸画布边缘的逻辑让我感到厌烦。
如果我有表示每条线的X,Y坐标,是否可以确定哪些交叉点创建了一个矩形?这似乎是最符合逻辑的,但我不确定如何去做。有人可以推荐一种方法吗?
我设法找到所有&#34;线的交叉点&#34;在画布上作为x,y
dicts的列表。例如:
----------------------
| |
| |
| |
|1111111111 |
| 2 |
| 2 |
----------------------
将返回&#34;十字路口列表&#34;订购x, y
为:
[
{'y': 1, 'x': 1}, # canvas top & left lines
{'y': 4, 'x': 1}, # line 1111111111 & canvas left line
{'y': 6, 'x': 1}, # canvas bottom & left lines
{'y': 4, 'x': 6}, # lines 1111111111 & 22
{'y': 6, 'x': 10}, # line 22 & canvas bottom line
{'y': 1, 'x': 20}, # canvas top & right lines
{'y': 6, 'x': 20} # canvas bottom & right lines
]
如何确定交叉路口的所有可能矩形?给定样本点,我需要得到两个矩形:
[
{'x1': 1, 'y1': 1, 'x2': 20, 'y2': 20}, # canvas
{'x1': 1, 'y1': 4, 'x2': 10, 'y2': 6} # intersection of 1111111111, 22 and canvas
]