确定由点定义的矩形的截面

时间:2019-01-21 19:11:10

标签: python python-3.x

我必须计算2分的部分。我做了一个特殊的Point类,并定义了Point之间的操作。例如:如果x值较低,则点1小于点2。如果x值相等,我们将查看y值以找到最小值。

我还定义了一个具有2个属性的类线段,即点1和点2。点1总是最小的(如上定义)

然后是第三类,称为矩形,它也由2个点定义(因此,这2个点彼此成对角线)。它还具有2个属性,即点1和点2,以与类线段相同的方式定义。

现在我必须确定2个矩形之间的截面。

  • 如果该部分为空,则输出必须为None
  • 如果该节是一个点,则输出必须是该点(当然,这是类点中定义的点。
  • 如果该段是线段,则输出必须是该段,再次来自类段
  • 如果截面是矩形,则输出必须是由2个点定义的矩形

该部分也可以在下图中看到:

Section between rectangles

现在我不知道在没有疯狂的条件和陈述的情况下我该怎么做。有什么方法可以简化这个过程,并有一个总能正常工作的解决方案?矩形也可以在xy平面中的任何地方,因此它们也可以具有负坐标。

我已经拥有的代码可以在下面看到。我的练习是在荷兰语中进行的,因此变量中使用了一些荷兰语术语。我要在这里定义它们:

  • 平底锅=点
  • 坚持=距离
  • Lijnstuk =线段
  • 长度=长度
  • Rechthoek =矩形
  • Oppervlakte =面积
  • Doorsnede =部分

因此可以看出,我需要有关最后一个功能“ doorsnede”或“ section”的帮助。有谁知道如何有效解决这个问题?预先感谢!

    class Punt:

    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    def __str__(self):
        return f'Punt({self.x}, {self.y})'

    def __repr__(self):
        return str(self)

    def __eq__(self, other):
        return True if self.x == other.x and self.y == other.y else False

    def __ne__(self, other):
        return True if not self == other else False

    def __lt__(self, other):
        return self.x < other.x if self.x != other.x else self.y < other.y

    def __le__(self, other):
        return True if self < other or self == other else False

    def __gt__(self, other):
        return True if other < self else False

    def __ge__(self, other):
        return True if other < self or self == other else False

    class Lijnstuk:

    def __init__(self, p1, p2):
        assert p1 != p2, 'lijnstuk moet lengte hebben die groter is dan nul'
        self.punt1 = min(p1, p2)
        self.punt2 = max(p1, p2)

    def __str__(self):
        return f'Lijnstuk(Punt({self.punt1.x}, {self.punt1.y}), Punt({self.punt2.x}, {self.punt2.y}))'

    def __repr__(self):
        return str(self)

    def lengte(self):
        return self.punt1.afstand(self.punt2)

    class Rechthoek:
    def __init__(self, p1, p2):
        assert p1 != p2, 'rechthoek moet oppervlakte hebben die groter is dan nul'
        self.punt1 = min(p1, p2)
        self.punt2 = max(p1, p2)

    def __str__(self):
        return f'Rechthoek(Punt({self.punt1.x}, {self.punt1.y}), Punt({self.punt2.x}, {self.punt2.y}))'

    def __repr__(self):
        return str(self)

    def oppervlakte(self):
        return abs(self.punt2.x - self.punt1.x)*abs(self.punt2.y - self.punt1.y)

    def doorsnede(self, other):

0 个答案:

没有答案