在Python中将一个矩形划分为NxM矩形并对其进行编号

所以我有一个大小为 104x68 的矩形,并将该矩形分成 36 个相等的部分。图像中的数字代表每个小矩形的坐标位置。

http://img.mukewang.com/64c1cfa600017ca106410433.jpg

现在我想对每个矩形进行编号,如下图所示:


http://img.mukewang.com/64c1cfb300016a2306490416.jpg

IE


For coordinate location x = [0, 17.3] and y = [0, 11.3] will be number 1 box

For coordinate location x = (17.3, 34.6] and y = [0, 11.3] will be number 2 box

....

For coordinate location x = (86.6, 104] and y = (56.6, 68] will be number 36 box

对每个框进行编号后,我希望:给定一个值(54,35),程序将生成该特定值的框编号,对于给定值(54, 35),框编号将为 22。


在Python中解决这个问题的优化方法是什么?有人可以帮忙吗?


慕田峪4524236
浏览 174回答 2
2回答

一只名叫tom的猫

下面,您可以通过输入所需的参数来获取矩形编号。weight并height显示矩形的尺寸(在您的示例中为width = 104, height = 68)。xpartition和ypartition参数显示每个维度的划分数(在您的示例中,36 等分意味着xpartition = 6, ypartition = 6)。xinput和yinput是查询点的尺寸,需要知道其在指定分区中的矩形数(在您的示例中为xinput = 54, yinput = 35)。import mathdef get_rect_num(width, height, xpartition, ypartition, xinput, yinput):    x_step = width / xpartition    y_step = height / ypartition    x = math.ceil((xinput if xinput > 0 else 0.5) / x_step) # handle border cases as well    y = math.ceil((yinput if yinput > 0 else 0.5) / y_step)  # handle border cases as well    return (y-1) * xpartition + xget_rect_num(104, 68, 6, 6, 54, 35)#> 22上述计算的时间复杂度基于Theta(1)四个主要操作。

慕码人8056858

不是最优化的方法(您可以使用itertools),但一种相当紧凑的方法就是使用numpy.arange。假设这是您的实际任务,我不明白为什么该方法需要比这更优化。import numpy as np SMALL_NUM = 1e-5 def range_pairs(max_value, divisions):     division_length = max_value/divisions     range_values = list(np.arange(0, max_value+SMALL_NUM, division_length))     return [(range_values[i], range_values[i+1]) for i in range(divisions)]  i = 0 for y in range_pairs(68, 6):     for x in range_pairs(104, 6):         i += 1         print(f"For coordinate location x = {x} and y = {y} will be number {i} box")对于较大的任务,请考虑itertools,并考虑预先计算range_pairs以下内容,或lru_cache在函数上添加一个range_pairs。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python