Esempio n. 1
0
class Rectangle(Shape):
    # todo: ordering of points
    # only two points

    def __init__(self, points):
        """
        :param points: 2 point at
        :return:
        """
        if len(points) != 2:
            raise Exception

        p = Shape._nearest_to_origin(points)
        self.A = p
        points.remove(p)
        self.C = points.pop()
        self.B = Point(self.A.y, self.C.x)
        self.D = Point(self.A.x, self.C.y)

    def perimeter(self):
        l1 = self.A.distance(self.B)
        l2 = self.B.distance(self.C)
        l3 = self.C.distance(self.D)
        l4 = self.D.distance(self.A)
        return l1 + l2 + l3 + l4

    def area(self):
        l1 = self.A.distance(self.B)
        l2 = self.A.distance(self.D)
        return l1 * l2
Esempio n. 2
0
class TriangleTest(unittest.TestCase):
    """
    Test triangle:
          /(1,1)      B
         /   |       / |
    (0,0)--(1,0)    A--C

    """
    points = {
        Point(0, 0),  # A
        Point(1, 0),  # C
        Point(1, 1),  # B
    }

    def test_constructor(self):
        return
        t = Triangle(self.points)
        self.assertEqual(t.A, self.points[0], 'a')
        self.assertEqual(t.B, self.points[2], 'b')
        self.assertEqual(t.C, self.points[1], 'c')

    def test_perimeter(self):
        return
        t = Triangle(self.points)
        perimeter = 1 + 1 + math.sqrt(2)
        self.assertEqual(
            t.perimeter(), perimeter,
            "Triangle perimeter should be {0} instead of {1}".format(
                perimeter, t.perimeter()))
Esempio n. 3
0
 def test_constructor(self):
     point = Point(10,13,"Actual position")
     self.assertEqual(point.x, 10)
     self.assertEqual(point.y, 13)
     self.assertEqual(point.label, "Actual position")
     point = Point(x=10, y=13, label="Actual position")
     self.assertEqual(point.x, 10)
     self.assertEqual(point.y, 13)
     self.assertEqual(point.label, "Actual position")
Esempio n. 4
0
    def __init__(self, points):
        """
        :param points: 2 point at
        :return:
        """
        if len(points) != 2:
            raise Exception

        p = Shape._nearest_to_origin(points)
        self.A = p
        points.remove(p)
        self.C = points.pop()
        self.B = Point(self.A.y, self.C.x)
        self.D = Point(self.A.x, self.C.y)
Esempio n. 5
0
 def _nearest_to_origin(points):
     min = Point.maxPoint()
     for p in points:
         if p.x == min.x:
             if p.y < min.y:
                 min = p
         elif p.x < min.x:
             min = p
     return min
Esempio n. 6
0
class RectangleTest(unittest.TestCase):
    p1 = Point(0, 0)
    p2 = Point(1, 0)
    p3 = Point(0, 1)
    p4 = Point(1, 1)

    def test_constructor(self):
        t = Rectangle({self.p1, self.p4})
        self.assertEqual(t.A, self.p1, "")
        #self.assertEqual(t.B, self.p2, "")
        self.assertEqual(t.C, self.p4, "")

    @unittest.skip("Unsolved ordering of points")
    def test_perimeter(self):
        t = Rectangle({self.p1, self.p4})
        perimeter = 4
        self.assertEqual(
            t.perimeter(), perimeter,
            "Rectangle perimeter should be {0} instead of {1}".format(
                perimeter, t.perimeter()))
Esempio n. 7
0
class Methods(unittest.TestCase):
    p0  = Point(0,0)
    p0b = Point(0,0)
    p01 = Point(0,1)
    p10 = Point(1,0)
    p11 = Point(1,1)
    p10n = Point(-1,0)
    p01n = Point(0,-1)
    p20  = Point(2,0)
    p20n = Point(-2,0)

    def test_zero_distance(self):
        self.assertEqual(self.p0.distance(self.p0b), 0)
        self.assertEqual(self.p0.distance(self.p0),  0)

    def test_simple_distance(self):
        self.assertEqual(self.p0.distance(self.p01), 1)
        self.assertEqual(self.p0.distance(self.p10), 1)

    def test_distance(self):
        self.assertAlmostEqual(self.p0.distance(self.p11), 1.414, 3)
        self.assertAlmostEqual(self.p0.distance(self.p11), math.sqrt(2), 25)
        self.assertAlmostEqual(self.p11.distance(self.p20n), 3.162, 3)
        self.assertAlmostEqual(self.p11.distance(self.p20n), math.sqrt(2)*math.sqrt(5), 25)
        self.assertAlmostEqual(self.p11.distance(self.p20n), math.sqrt(10), 25)
        self.assertEqual(self.p0.distance(self.p20), 2)
        self.assertEqual(self.p20n.distance(self.p20), 4)

    def test_angles_agains_zero(self):
        know_values = [
            (self.p10,    0),
            (self.p11,   45),
            (self.p01,   90),
            (self.p10n, 180),
            (self.p01n, 270)
        ]
        for p, a in know_values:
            self.assertEqual(
                self.p0.angle(p),
                a,
                "Angle should be {0} (between {1} and {2}".format(a, self.p0, p)
            )