我怎么会得到这个价值? (蟒蛇)

时间:2014-11-20 00:23:28

标签: python class collision detect

我有

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内的值。

1 个答案:

答案 0 :(得分:1)

  

我无法从点类获取矩形类的值。

我认为你需要阅读一本关于课程的好教程。也许the chapter in the official tutorial,或者可能是第三方教程。 StackOverflow不是学习基本概念的好地方。

您实际上并不希望从点类获取值,您希望从获取特定点实例的值。毕竟,世界上有很多点,每个点都有不同的xy值,并且您正在尝试检查某个特定点是否与矩形相撞。< / 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)

那就是它。

除了您可能首先不想要getXgetY方法之外;最好只做point.xpoint.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()