def testValidConstruction(self): p1 = Point(0, 0) p2 = Point(2, 0) p3 = Point(0, 1) p4 = Point(3, 0) p5 = Point(0, 2) e1 = Ellipse(p1, p2, p3, p4, p5) self.assertEqual(p1, e1.center) self.assertEqual(p2, e1.focus1) self.assertEqual(p3, e1.focus2) self.assertEqual(p4, e1.edge1) self.assertEqual(p5, e1.edge2) e2 = Ellipse(1, 1, 4, 4, -2, 4, 6, 6, -2, 4) self.assertEqual(1, e2.center.x) self.assertEqual(1, e2.center.y) self.assertEqual(4, e2.focus1.x) self.assertEqual(4, e2.focus1.y) self.assertEqual(-2, e2.focus2.x) self.assertEqual(4, e2.focus2.y) self.assertEqual(6, e2.edge1.x) self.assertEqual(6, e2.edge1.y) self.assertEqual(-2, e2.edge2.x) self.assertEqual(4, e2.edge2.y)
def line_to_shape(self, line: str) -> Optional[Shape]: if Ellipse.is_valid_description(line): return Ellipse.parse_from_line(line) if Rectangle.is_valid_description(line): return Rectangle.parse_from_line(line) return None
def testValidateEllipse(self): e1 = ShapeFactory.build("ellipse", Point(0, 0), Point(3, 0), Point(0, 2)) Ellipse.validateEllipse(e1, "Ellipse unexpectedly invalid") self.assertRaises( ShapeException, Ellipse.validateEllipse, "(0, 0, 3, 0, 0, 2)", "String \'(0, 0, 3, 0, 0, 2)\' is not a valid ellipse") self.assertRaises(ShapeException, Ellipse.validateEllipse, Point(1, 1), "Point is not a valid ellipse")
def testValidateEllipse(self): e1 = Ellipse(0, 0, 2, 0, 0, 1, 3, 0, 0, 2) Validator.validateEllipse(e1, "Ellipse unexpectedly invalid") self.assertRaises( ShapeException, Validator.validateEllipse, "(0, 0, 2, 0, 1, 0, 3, 0, 0, 2)", "String \'(0, 0, 2, 0, 0, 1, 3, 0, 0, 2)\' is not a valid ellipse") self.assertRaises(ShapeException, Validator.validateEllipse, Point(1, 1), "Point is not a valid ellipse")
def testComputeArea(self): e1 = Ellipse(0, 0, 1, 0, 0, 1, 2, 0, 0, 2) self.assertAlmostEqual(12.566, e1.computeArea(), places=3) e2 = Ellipse(1, 1, 4, 4, -2, 4, 6, 6, -2, 4) self.assertAlmostEqual(94.248, e2.computeArea(), places=3)
def add_shape(self, x: int, y: int) -> Shape: width = self.width_box.get() color = self.color_btn["bg"] background = self.background_btn["bg"] shape_type = self.type_box.get() if shape_type == "Ellipse": r1 = 10 r2 = 10 return Ellipse(x - r1, y - r2, r1, r2, width, color, background) if shape_type == "Rectangle": w = 20 h = 20 return Rectangle(x - w, y - h, w, h, width, color, background)
def testScale(self): e1 = Ellipse(0, 0, 1, 0, 0, 1, 2, 0, 0, 2) e1.scale(2) self.assertAlmostEqual(0, e1.center.x) self.assertAlmostEqual(0, e1.center.y) self.assertAlmostEqual(2, e1.focus1.x) self.assertAlmostEqual(0, e1.focus1.y) self.assertAlmostEqual(0, e1.focus2.x) self.assertAlmostEqual(2, e1.focus2.y) e2 = Ellipse(1, 1, 4, 4, -2, 4, 6, 6, -2, 4) e2.scale(1 / 3) self.assertAlmostEqual(1, e2.center.x) self.assertAlmostEqual(1, e2.center.y) self.assertAlmostEqual(2, e2.focus1.x) self.assertAlmostEqual(2, e2.focus1.y) self.assertAlmostEqual(0, e2.focus2.x) self.assertAlmostEqual(2, e2.focus2.y)
def testMove(self): e1 = Ellipse(1, 1, 4, 4, -2, 4, 6, 6, -2, 4) e1.move(3, 4) self.assertAlmostEqual(4, e1.center.x) self.assertAlmostEqual(5, e1.center.y) self.assertAlmostEqual(7, e1.focus1.x) self.assertAlmostEqual(8, e1.focus1.y) self.assertAlmostEqual(1, e1.focus2.x) self.assertAlmostEqual(8, e1.focus2.y) self.assertAlmostEqual(9, e1.edge1.x) self.assertAlmostEqual(10, e1.edge1.y) self.assertAlmostEqual(1, e1.edge2.x) self.assertAlmostEqual(8, e1.edge2.y) e1.move(-.234, -1.987) self.assertAlmostEqual(3.766, e1.center.x) self.assertAlmostEqual(3.013, e1.center.y) self.assertAlmostEqual(6.766, e1.focus1.x) self.assertAlmostEqual(6.013, e1.focus1.y) self.assertAlmostEqual(0.766, e1.focus2.x) self.assertAlmostEqual(6.013, e1.focus2.y) self.assertAlmostEqual(8.766, e1.edge1.x) self.assertAlmostEqual(8.013, e1.edge1.y) self.assertAlmostEqual(.766, e1.edge2.x) self.assertAlmostEqual(6.013, e1.edge2.y) e1.move(.234, 1.987) self.assertAlmostEqual(4, e1.center.x) self.assertAlmostEqual(5, e1.center.y) self.assertAlmostEqual(7, e1.focus1.x) self.assertAlmostEqual(8, e1.focus1.y) self.assertAlmostEqual(1, e1.focus2.x) self.assertAlmostEqual(8, e1.focus2.y) self.assertAlmostEqual(9, e1.edge1.x) self.assertAlmostEqual(10, e1.edge1.y) self.assertAlmostEqual(1, e1.edge2.x) self.assertAlmostEqual(8, e1.edge2.y)
def validateCircle(value, errorMessage): Ellipse.validateEllipse(value, errorMessage) if value.axis1.computeLength() != value.axis2.computeLength(): raise ShapeException(errorMessage)
from shapes.rectangle import Rectangle from shapes.square import Square from shape_list.shape_list import ShapeList from color.color import Color shape_list = ShapeList() try: shape_list.append(1) except TypeError: print('Only shape append support') shape_list.append(Circle(5, Color.BLUE)) shape_list.append(Rectangle(2, 3, Color.RED)) shape_list.append(Square(5, Color.BLUE)) shape_list.append(Ellipse(2, 3, Color.GREEN)) print(shape_list) print(shape_list.sorted_shapes_areas(Color.BLUE)) print(Ellipse(4, 5, Color.BLUE).__hash__()) print(Ellipse(4, 5, Color.RED).__hash__()) print(Ellipse(5, 4, Color.BLUE).__hash__()) a = Circle(4, Color.BLUE) d = Circle(4, Color.BLUE) b = Circle(4, Color.RED) c = Ellipse(4, 5, Color.BLUE) print(a == c) #False print(a == b) #False print(a == d) #True if a == d: