因此,我第一次深入研究了OOP编程。我遇到了一个练习,我们应该用OOP编写一个脚本,创建一个矩形,计算它的面积和周长,以及与第二个矩形重叠的面积。到目前为止,一切顺利,我设法解决了这个问题。然而,一旦我解决了它,我检查了给定的解决方案,它看起来像这样:
from copy import copy
class Point:
def __init__(self, x=0.0, y=0.0):
self.x = x
self.y = y
def __repr__(self):
return '({}, {})'.format(self.x, self.y)
class Rectangle:
def __init__(self, point, width, height):
self.point = copy(point)
self.width = abs(width)
self.height = abs(height)
if self.width == 0:
self.width == 1
if self.height == 0:
self.height == 1
def __repr__(self):
return '[{}, w = {}, h = {}]'.format(self.point, self.width, self.height)
def surface_area(self):
return self.width * self.height
def circunference(self):
return 2*(self.width + self.height)
def bottom_right(self):
return Point(self.point.x + self.width, self.point.y + self.height)
def overlap(self, r):
r1, r2 = self, r
if self.point.x > r.point.x or (self.point.x == r.point.x and self.point.y > r.point.y):
r1, r2 = r, self
if r1.bottom_right().x <= r2.point.x or r1.bottom_right().y <= r2.point.y:
return None
return Rectangle(r2.point,
min(r1.bottom_right().x - r2.point.x, r2.width),
min(r1.bottom_right().y - r2.point.y, r2.height))
r1 = Rectangle(Point(1, 1), 8, 5)
r2 = Rectangle(Point(2, 3), 9, 2)
print(r1, '\n', r1.surface_area(), '\n', r1.circunference(), '\n', r1.bottom_right())
r = r1.overlap(r2)
if r:
print(r)
else:
print('No, overlap.')
我的问题是bottom_right方法。我很确定它会返回右上角,而不是右下角。但由于我仍然努力在连续性中完全掌握这个逻辑,我担心我可能是那个有错的人。如果解决方案确实是正确的(该方法返回右下角顶点),那么我遗漏了一些东西,因此我不能完全理解这段代码。
发布于 2018-07-27 06:07:18
这只是因为在计算机图形学中,原点通常设置在左上角。所以,你实际上会有一个反转的y轴,与你在数学中习惯的几何相比。
因此,你会得到类似这样的东西:
因此,点(X, Y)
实际上位于矩形的右下角,从点(0, 0)
开始,具有宽度X
和高度Y
。
https://stackoverflow.com/questions/51548091
复制相似问题