我正在尝试为这个问题创建一个解决方案,我的代码专注于循环(for和while):
让参数Q为“矩形”列表,由宽度,高度指定, 和(x,y) - 左下角的位置。附件(Q)返回 包含Q中每个矩形的最小矩形。的方式 矩形由元组(x,y,宽度,高度)表示。
到目前为止,这是我的代码:
def Enclosure(Q):
c = []
d = []
for (x,y,width,height) in sorted(Q):
c.append(x)
d.append(y)
print(c)
print(min(c))
e=tuple([min(c)]+[min(d)])
print(e)
忽略print语句,这些仅用于调试目的。我的代码到这一点创建了一个包含矩形左下角(x,y)坐标的元组,我试图获得程序形式。但在此之后,我完全不知道如何找到封闭矩形的(高度,宽度)。我怎么能这样做?
此外,这是程序运行时应该执行的示例:
R1 = (10,20,5,100) #R1,R2,R3 are each rectangles
R2 = (15,5,30,150) #layout of the tuple:(x,y,width,height)
R3 = (-4,30,20,17)
Enclosure([R1,R2,R3])
(-4, 5, 49, 150) #rectangle that encloses R1,R2,R3
答案 0 :(得分:0)
试试这个:
def Enclosure(Q):
c = []
d = []
x2 = []
y2 = []
for (x,y,width,height) in sorted(Q):
c.append(x)
d.append(y)
x2.append(width + x)
y2.append(height + y)
e = tuple([min(c)]+[min(d)] + [max(x2) - min(c)] + [max(y2) - min(d)])
print(e)
您可以将e = tuple...
替换为:
e=(min(c), min(d), max(x2) - min(c), max(y2) - min(d)) # This makes a tuple directly
避免首先列出一个列表,然后将其转换为元组。
答案 1 :(得分:-2)
确保您可以解释为什么使用了继承,否则您的老师会知道您在作弊:
class Geometry(object):
def __init__(self, x, y):
self.x = x
self.y = y
class Point(Geometry):
def __repr__(self):
return "<Point at {s.x},{s.y}>".format(s=self)
class Rectangle(Geometry):
def __init__(self, x, y, width, height):
super(Rectangle, self).__init__(x, y)
self.width = width
self.height = height
@property
def oposite_corner(self):
return Point(self.x + self.width, self.y + self.height)
def __repr__(self):
return "<Rectange of {s.width}x{s.height} at {s.x},{s.y}>".format(s=self)
def enclosing_rectangle(rect_list):
x1, y1, x2, y2 = (
min([r.x for r in rect_list]),
min([r.y for r in rect_list]),
max([r.oposite_corner.x for r in rect_list]),
max([r.oposite_corner.y for r in rect_list]),
)
return Rectangle(x1, y1, x2 - x1, y2 - y1)
请自行测试并修复任何错误(提示:super
已更改):
>>> l = [Rectangle(1, 2, 3, 4), Rectangle(-1, -1, 1, 1), Rectangle(3, 4, 1, 1)]
>>> enclosing_rectangle(l)
<Rectangle of 5x7 at -1,-1>
[更新]
什么?!?删除投票?用这个答案解释什么是如此令人反感?