Python:在函数中实现脚本。一些建议

2024-10-01 19:26:32 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我对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. 我需要创建一个函数还是两个函数。示例:def 得到最小面积矩形
  2. 赫尔是一个价值列表。这是最好的格式吗?
    1. 按照一个函数的方法,我有一个问题是如何在内部集成mostfar

提前谢谢

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是如何整合的(抱歉,这个词不正确)


Tags: 函数ipgetirpiareamathil
2条回答
  1. 你当然可以把它作为一个单一的函数来做:稍微修改mostfar,而不是打印找到的区域,而是跟踪最小的信息。或者你可以让它把打印出来的值收集到一个lst中,然后G.E.a.R.可以用它来找到最小值。在

EDIT:(我忽略了一些代码在mostfar之外)我将“脚本”部分(mostfar之后的代码)包装到一个函数中,并按上面所述修改它。然后,您的“脚本”将只调用该函数,或者,如果使用第二个修改,则从返回的列表中找到min。在

  1. 我看不出你对船体的描述有什么问题。在
  1. 您可以使用单个函数或两个函数,但使用两个函数可能更干净、更容易。您可以保持mostfar函数不变。然后,只需通过添加函数定义行将代码的后半部分转换为函数:

    def get_minimum_area_rectangle(hull):
    

    …然后缩进其余的代码(从n = len(hull)开始)以形成函数体。您还需要更改函数以返回要获取的值(长度、宽度和面积)。这将使您的代码保持模块化和干净,并且只需要很少的更改。

  2. 为此,使用hull的值列表似乎没问题。另一种方法是使用数组(比如NumPy数组),但是在本例中,您将迭代地遍历数据,一次只处理一个项目,而不是同时跨多个数据点执行任何计算。所以一张单子就可以了。访问列表中的项目很快,与你必须做的数学相比,它不应该成为一个瓶颈。

相关问题 更多 >

    热门问题