我有
class Point:
def __init__(self, initX, initY):
self.x = initX
self.y = initY
def getX(self):
return self.x
def getY(self):
return self.y
def __str__(self):
return "x=" + str(self.x) + ", y=" + str(self.y)
class Rectangle:
def __init__(self, initP, initW, initH):
self.__location = initP
self.__width = initW
self.__height = initH
def getWidth(self):
return self.__width
def getHeight(self):
return self.__height
def getLocation(self):
return self.__location
#---------------------------------------------------------------
#string
def __str__(self):
return "x=" + str(self.__location.x) + ", y=" + str(self.__location.y) +", Width=" + str(self.getWidth()) + ", Height=" +str(self.getHeight())
def area(self):
return self.getWidth() * self.getHeight()
def calculatePerimeter(self):
return self.getWidth()*2 +self.getHeight()*2
def transpose(self):
temp = self.__width
self.__width = self.__height
self.__height = temp
def encloses(self, otherP):
return ((self.getWidth() + self.getLocation().getX()) > otherP.getX()\
and (self.getLocation().getX()) <otherP.getX() \
and (self.getHeight() + self.getLocation().getY()) >otherP.getY()\
and self.getLocation().getY() < otherP.getY())
def computeDiagonal(self):
d = (self.getWidth()**2 + self.getHeight()**2) ** 0.5
return d
def detectCollision(firstRectangle, secondRectangle):
print(firstRectangle.getWidth())
print(secondRectangle)
first = Rectangle(Point(1,0), 4, 3)
second = Rectangle(Point(4,0), 4, 3)
Rectangle.detectCollision(first, second)
我正在尝试检测碰撞。我有点卡住了。 (detectCollision) 我无法从点类获取矩形类的值。 有人有任何想法吗?
函数detectCollision错误。我正在测试,我可以通过getHeight()获得宽度和高度,但是我无法获得Point内的值。
答案 0 :(得分:1)
我无法从点类获取矩形类的值。
我认为你需要阅读一本关于课程的好教程。也许the chapter in the official tutorial,或者可能是第三方教程。 StackOverflow不是学习基本概念的好地方。
您实际上并不希望从点类获取值,您希望从获取特定点实例的值。毕竟,世界上有很多点,每个点都有不同的x
和y
值,并且您正在尝试检查某个特定点是否与矩形相撞。< / p>
您如何知道哪个实例?你把一个作为参数。然后,您可以访问该对象的成员,方法等,就像使用字符串或任何其他对象一样。
class Rectangle(object):
# existing stuff
def collision_check(self, point):
return (self.left <= point.getX() <= self.right and
self.top <= point.getY() <= self.bottom)
那就是它。
除了您可能首先不想要getX
和getY
方法之外;最好只做point.x
和point.y
。
此外,我显然不得不对你如何定义Rectangle
(左/上/下/右?左/右/宽/上?topleftpoint / bottomrightpoint?)以及什么做出一些假设你的意思是&#34;碰撞&#34; (击中矩形的边缘,或矩形的内部?)等,因为你没有解释任何这些。但希望您可以根据实际设计进行调整。
那么,你如何使用它?你只需将一个点作为参数传递给方法,就像你使用len
一样:
>>> rect = Rectangle(10, 10, 20, 20)
>>> point1 = Point(5, 5)
>>> rect.collision_check(point1)
False
>>> point2 = Point(15, 15)
>>> rect.collision_check(point2)
True
现在您已经向我们展示了更多代码,看起来您正在尝试碰撞检查两个矩形 - 更重要的是,您的问题是您的矩形使用{{1} }作为左上角的原点,您不知道如何访问的协调。
根据您的描述,&#34;我正在测试,我可以通过getHeight()得到宽度和高度,但我无法获得Point
&#34;中的值,您似乎仍然在这里错过了关键问题。您不想在Point
内获取值。 Point
是一个用于创建实际点对象的类工厂。您希望获取其中一个实际点对象内的值,即您存储在矩形对象Point
中的值,并通过__location
方法提供。 (正如我已经解释的那样,你应该摆脱那些getter方法并且只有getLocation
属性,但是现在让我们忘记它。)
因此,获得您感兴趣的特定点对象的方式是在矩形上调用location
,然后获取该特定点对象的x和y值的方式是调用其getLocation()
和getX
方法。所以,这是使用所有这些方法的一个例子:
getY
或者您可以将这些调用合并为一个表达式:
firstLocation = firstRectangle.getLocation()
firstLeft = firstLocation.getX()
所以,你可以这样做:
firstLeft = firstRectangle.getLocation().getX()