首先,我对Python(一个编程领域)相当陌生,但我希望学习并转换由jwpat7开发的函数。给出一组由凸壳导出的点
hull= [(560023.44957588764,6362057.3904932579),
(560023.44957588764,6362060.3904932579),
(560024.44957588764,6362063.3904932579),
(560026.94957588764,6362068.3904932579),
(560028.44957588764,6362069.8904932579),
(560034.94957588764,6362071.8904932579),
(560036.44957588764,6362071.8904932579),
(560037.44957588764,6362070.3904932579),
(560037.44957588764,6362064.8904932579),
(560036.44957588764,6362063.3904932579),
(560034.94957588764,6362061.3904932579),
(560026.94957588764,6362057.8904932579),
(560025.44957588764,6362057.3904932579),
(560023.44957588764,6362057.3904932579)]
此脚本返回此post problem后面所有可能区域的打印。代码由 jwpat7是:
^{pr2}$结果是:
i iL iP iR Area
0 6 8 0 203.000
1 6 8 0 211.875
2 6 8 0 205.800
3 6 10 0 206.250
4 7 12 0 190.362
5 8 0 1 203.000
6 10 0 4 201.385
7 0 1 6 203.000
8 0 3 6 205.827
9 0 3 6 205.640
10 0 4 7 187.451
11 0 4 7 189.750
12 1 6 8 203.000
我希望创建一个返回最小矩形的长度、宽度和面积的函数。例如:
Length, Width, Area = get_minimum_area_rectangle(hull)
print Length, Width, Area
18.036, 10.392, 187.451
我的问题是:
提前谢谢
1)解决方案:一个功能 按照Scott Hunter提出的第一个解决方案,我有一个问题,就是在get_minimum_area_rectangle()中集成mostfar()。任何建议或帮助都非常感谢,因为我可以学习。在
#!/usr/bin/python
import math
def get_minimum_area_rectangle(hull):
# get pi greek
pi = 4*math.atan(1)
# number of points
n = len(hull)
# indexes left, right, opposite
iL = iR = iP = 1
# work clockwise direction
for i in range(n-1):
# distance on x axis
dx = hull[i+1][0] - hull[i][0]
# distance on y axis
dy = hull[i+1][1] - hull[i][1]
# get orientation angle of the edge
theta = pi-math.atan2(dy, dx)
s, c = math.sin(theta), math.cos(theta)
yC = hull[i][0]*s + hull[i][1]*c
从这里开始,按照上面的jwpat7示例,我需要使用mostfar()。在这一点上,我有一个问题要理解,mostfar是如何整合的(抱歉,这个词不正确)
EDIT:(我忽略了一些代码在mostfar之外)我将“脚本”部分(mostfar之后的代码)包装到一个函数中,并按上面所述修改它。然后,您的“脚本”将只调用该函数,或者,如果使用第二个修改,则从返回的列表中找到min。在
您可以使用单个函数或两个函数,但使用两个函数可能更干净、更容易。您可以保持
mostfar
函数不变。然后,只需通过添加函数定义行将代码的后半部分转换为函数:…然后缩进其余的代码(从
n = len(hull)
开始)以形成函数体。您还需要更改函数以返回要获取的值(长度、宽度和面积)。这将使您的代码保持模块化和干净,并且只需要很少的更改。为此,使用
hull
的值列表似乎没问题。另一种方法是使用数组(比如NumPy数组),但是在本例中,您将迭代地遍历数据,一次只处理一个项目,而不是同时跨多个数据点执行任何计算。所以一张单子就可以了。访问列表中的项目很快,与你必须做的数学相比,它不应该成为一个瓶颈。相关问题 更多 >
编程相关推荐