def test_should_calculate_circle_area(self):
		radius = 1./sqrt(pi)
		circle = Circle(radius)

		area = circle.area()

		self.assertAlmostEqual(area, 1)
  def test_diagram_with_two_circles_returns_nothing_when_location_of_selection_isnt_in_either_circle(self):
    circle1 = Circle(0, 0, 3)
    circle2 = Circle(0, 0, 3)
    
    self.diagram.add_shape(circle1)
    self.diagram.add_shape(circle2)

    self.assertEqual(None, self.diagram.select_at(10, 0))
  def test_diagram_with_two_circles_at_different_location_returns_second_circle_at_selected_location(self):
    circle1 = Circle(10, 10, 3)
    circle2 = Circle(0, 0, 3)
    
    self.diagram.add_shape(circle1)
    self.diagram.add_shape(circle2)

    self.assertEqual(circle1, self.diagram.select_at(7, 10))
  def test_diagram_with_two_circles_at_same_location_returns_first_circle(self):
    circle1 = Circle(0, 0, 3)
    circle2 = Circle(0, 0, 3)
    
    self.diagram.add_shape(circle1)
    self.diagram.add_shape(circle2)

    self.assertEqual(circle2, self.diagram.select_at(0, 0))
 def test_add_two_circles_to_diagram(self):
   circle1 = Circle(0, 0, 3)
   circle2 = Circle(0, 10, 3)
   
   self.diagram.add_shape(circle1)
   self.diagram.add_shape(circle2)
   
   self.assertEqual(circle1, self.diagram.shapes[0])
   self.assertEqual(circle2, self.diagram.shapes[1])
 def test_diagram_with_two_circles_at_different_locations_deletes_second_circle(self):
   circle1 = Circle(0, 0, 3)
   circle2 = Circle(10, 10, 3)
   
   self.diagram.add_shape(circle1)
   self.diagram.add_shape(circle2)
   
   self.diagram.delete_shape_at(9, 9)
   self.assertEqual([circle1], self.diagram.shapes)
 def test_diagram_with_two_circles_deletes_nothing_if_point_isnt_inside_circle(self):
   circle1 = Circle(0, 0, 3)
   circle2 = Circle(0, 0, 3)
   
   self.diagram.add_shape(circle1)
   self.diagram.add_shape(circle2)
   
   self.diagram.delete_shape_at(10, 10)
   
   self.assertEqual([circle1, circle2], self.diagram.shapes)
 def test_diagram_with_two_overlapping_circles_deletes_only_first(self):
   circle1 = Circle(0, 0, 3)
   circle2 = Circle(0, 10, 3)
   
   self.diagram.add_shape(circle1)
   self.diagram.add_shape(circle2)
   
   self.diagram.delete_shape_at(0, 0)
   
   self.assertEqual([circle2], self.diagram.shapes)
  def test_group_a_group_and_a_circle(self):
    rectangle1 = Rectangle(-2, -1, 4, 1)
    rectangle2 = Rectangle(-1, 2, 4, 2)
    
    square1 = Square(7, 3, 2)
    square2 = Square(10, 3, 2)
    
    circle1 = Circle(2, 6, 3)

    self.diagram.add_shape(rectangle1)
    self.diagram.add_shape(rectangle2)
    
    self.diagram.add_shape(square1)
    self.diagram.add_shape(square2)
    
    self.diagram.add_shape(circle1)
    
    self.diagram.group_shapes(-1, 1, 8, 6)
    
    self.diagram.group_shapes(9, 3, 8, 4)
    
    self.diagram.group_shapes(3, 6, 20, 20)
    
    self.assertEqual(circle1, self.diagram.shapes[0].shapes[0])
    self.assertEqual([rectangle1, rectangle2], self.diagram.shapes[0].shapes[1].shapes)
    self.assertEqual([square1, square2], self.diagram.shapes[0].shapes[2].shapes)
  def test_add_circle_and_rectangle_to_diagram(self):
    circle1 = Circle(0, 0, 3)
    rectangle1 = Rectangle(0, 0, 4, 2)
    
    self.diagram.add_shape(circle1)
    self.diagram.add_shape(rectangle1)

    self.assertEqual([circle1, rectangle1], self.diagram.shapes)
 def test_diagram_has_circle_on_top_of_rectangle_selects_rectangle_when_point_is_on_rectangle(self):
   rectangle1 = Rectangle(0, 0, 8, 4)
   circle1 = Circle(0, 0, 3)
   
   self.diagram.add_shape(rectangle1)
   self.diagram.add_shape(circle1)
   
   self.assertEqual(rectangle1, self.diagram.select_at(4, 2))
 def test_ungroup_a_nonexistent_group_from_a_di(self):
   circle1 = Circle(0, 3, 3)
   rectangle1 = Rectangle(0, 0, 4, 2)
   self.diagram.add_shape(circle1)
   self.diagram.add_shape(rectangle1)
   
   self.diagram.group_shapes(100,100, 4, 2)
   
   self.assertEqual(2, len(self.diagram.shapes))
  def test_diagram_has_circle_on_top_of_rectangle_delete_circle_check_for_a_property_of_rectangle_being_there(self):
    rectangle1 = Rectangle(0, 0, 8, 4)
    circle1 = Circle(0, 0, 3)

    self.diagram.add_shape(rectangle1)
    self.diagram.add_shape(circle1)

    self.diagram.delete_shape_at(0, 0)
    self.assertEqual([rectangle1], self.diagram.shapes)
  def test_diagram_has_a_group_and_two_ungrouped_shapes(self):
    rectangle1 = Rectangle(-1, 7, 8, 4)
    circle1 = Circle(3, 6, 3)
    square1 = Square(-5, 0, 8)

    circle2 = Circle(9, 6, 3)
    square2 = Square(8, 0, 8)

    self.diagram.add_shape(rectangle1)
    self.diagram.add_shape(circle1)
    self.diagram.add_shape(square1)

    self.diagram.add_shape(circle2)
    self.diagram.add_shape(square2)
    
    self.diagram.group_shapes(0, 0, 21, 20)
    
    self.assertEqual([rectangle1, circle1, square1], self.diagram.shapes[2].shapes)
    self.assertEqual([circle2, square2], self.diagram.shapes[0:2])
 def test_load_diagram_with_one_circle(self):
   circle1 = Circle(0, 3, 3)
   self.diagram.add_shape(circle1)
   data_bytes = self.diagram.convert_data()
   
   self.diagram.shapes = []
   
   self.diagram.shapes = self.diagram.load_diagram(data_bytes)
   
   self.assertEqual(1, len(self.diagram.shapes))
Exemple #16
0
 def create_shape(self):
     circle = Circle(100, 100, 25)
     self.diagram.add_shape(circle)
     self.canvas.create_oval(circle.center[0] - 25,
                             circle.center[1] - 25,
                             circle.center[0] + 25,
                             circle.center[1] + 25,
                             outline='black',
                             fill='white',
                             tags="shape")
  def test_draw_a_rectangle_area_any_shape_within_it_will_be_grouped(self):
    rectangle1 = Rectangle(-1, 7, 8, 4)
    circle1 = Circle(0, 0, 3)
    square1 = Square(-5, 0, 8)

    self.diagram.add_shape(rectangle1)
    self.diagram.add_shape(circle1)
    self.diagram.add_shape(square1)
    
    self.diagram.group_shapes(0, 0, 25, 25)
  
    self.assertEqual([rectangle1, circle1, square1], self.diagram.shapes[0].shapes)
 def test_load_diagram_with_one_circle_and_one_rectangle(self):
   circle1 = Circle(0, 3, 3)
   rectangle1 = Rectangle(0, 0, 4, 2)
   self.diagram.add_shape(circle1)
   self.diagram.add_shape(rectangle1)
   data_bytes = self.diagram.convert_data()
   
   self.diagram.shapes = []
   
   self.diagram.shapes = self.diagram.load_diagram(data_bytes)
   
   self.assertEqual(2, len(self.diagram.shapes))
 def test_diagram_has_only_a_group_no_ungrouped_shapes(self):
   rectangle1 = Rectangle(-1, 7, 8, 4)
   circle1 = Circle(3, 6, 3)
   square1 = Square(-5, 0, 8)
   
   self.diagram.add_shape(rectangle1)
   self.diagram.add_shape(circle1)
   self.diagram.add_shape(square1)
   
   self.diagram.group_shapes(0, 0, 21, 20)
   
   self.assertEqual([rectangle1, circle1, square1], self.diagram.shapes[0].shapes)
   self.assertEqual(1, len(self.diagram.shapes))
Exemple #20
0
def trivial(r):
    """
    Fonction triviale permettant de trouver un cercle avec tous les points de r sur sa limite

    params :
        - r = Un ensemble de points avec |r| <= 3

    return -> Circle = Le cercle avec tous les points de r à sa limite
    """

    # Si r ne contient pas de points
    if len(r) == 0:
        return Circle((0, 0), 0)

    # Si r contient 1 point
    elif len(r) == 1:
        return Circle(list(r)[0], 0)

    # Si r contient 2 points
    elif len(r) == 2:
        r = list(r)
        return diameter_circle(r[0], r[1])

    # Si r contient 3 points ou plus
    elif len(r) == 3:
        r = list(r)

        # On vérifie si on ne peut pas déterminer le cercle avec seulement 2 points
        if point_in_circle(r[2], diameter_circle(r[0], r[1])):
            return diameter_circle(r[0], r[1])
        elif point_in_circle(r[1], diameter_circle(r[0], r[2])):
            return diameter_circle(r[0], r[2])
        elif point_in_circle(r[0], diameter_circle(r[1], r[2])):
            return diameter_circle(r[1], r[2])

        return circumscribed_circle(r[0], r[1], r[2])

    # Autrement on retourne None
    return None
  def test_ungroup_a_group(self):
    rectangle1 = Rectangle(-1, 7, 8, 4)
    circle1 = Circle(20, 2, 3)
    square1 = Square(-5, 0, 8)

    self.diagram.add_shape(rectangle1)
    self.diagram.add_shape(circle1)
    self.diagram.add_shape(square1)

    self.diagram.group_shapes(0, 0, 21, 20)
    
    self.diagram.ungroup(self.diagram.shapes[1])

    self.assertEqual([circle1, rectangle1, square1], self.diagram.shapes)
  def test_delete_group_and_its_shapes(self):
    rectangle1 = Rectangle(-1, 7, 8, 4)
    circle1 = Circle(20, 6, 3)
    square1 = Square(-5, 0, 8)

    self.diagram.add_shape(rectangle1)
    self.diagram.add_shape(circle1)
    self.diagram.add_shape(square1)

    self.diagram.group_shapes(0, 0, 21, 20)
    
    self.diagram.delete_shape_at(3, 6)
    
    self.assertEqual([circle1], self.diagram.shapes)
Exemple #23
0
def diameter_circle(p1, p2):
    """
    Cette fonction retourne le plus petit cercle passant par p1 et p2

    params :
        - p1 = Le point 1
        - p2 = Le point 2

    return -> Circle = Le cercle
    """

    c_x = (p1[0] + p2[0]) / 2
    c_y = (p1[1] + p2[1]) / 2
    c_rad = distance((c_x, c_y), p1)
    return Circle((c_x, c_y), c_rad)
Exemple #24
0
def circumscribed_circle(p1, p2, p3):
    """
    Cette fonction retourne le cercle circonscrit dans le triangle formé par les trois points

    params :
        - p1 = Le point 1
        - p2 = Le point 2
        - p3 = Le point 3

    return -> Circle = Le cercle circonscrit
    """

    # On vérifie que les points ne soient pas colinéaires
    if ((p1[0] - p2[0]) * (p1[1] - p3[1]) - (p1[1] - p2[1]) *
        (p1[0] - p3[0])) == 0:
        return None

    # On vérifie que p1 n'est pas sur la même ligne que p2 ou p3 pour éviter les multiplication par 0
    if p1[1] == p2[1]:
        tmp = p1
        p1 = p3
        p3 = tmp
    elif p1[1] == p3[1]:
        tmp = p1
        p1 = p2
        p2 = tmp

    # On récupère les centres des segments p1-p2 et p1-p3
    # Soient m = (p1 + p2) / 2 et n = (p1 + p3) / 2
    m_x = (p1[0] + p2[0]) / 2
    m_y = (p1[1] + p2[1]) / 2
    n_x = (p1[0] + p3[0]) / 2
    n_y = (p1[1] + p3[1]) / 2

    # On calcule les équations des droites d1 et d2 respectivement médianes de p1-p2 et p1-p3
    d1_a = (p2[0] - p1[0]) / (p1[1] - p2[1])
    d1_b = m_y - d1_a * m_x
    d2_a = (p3[0] - p1[0]) / (p1[1] - p3[1])
    d2_b = n_y - d2_a * n_x

    # On peut maintenant avoir les coordonnées du cercle
    c_x = (d2_b - d1_b) / (d1_a - d2_a)
    c_y = d1_a * c_x + d1_b
    c_rad = distance((c_x, c_y), p1)

    # On retourne le résultat
    return Circle((c_x, c_y), c_rad)
Exemple #25
0
from src.circle import Circle
from src.point import Point

if __name__ == '__main__':
    # Testing libraries of Point and Circle
    small_circle = Circle(Point(12, 12), 425)
    big_circle = Circle(Point(9, 1), 10293.4)

    if (small_circle < big_circle):
        print('Test #1 is OK')

    if (small_circle == small_circle):
        print('Test #2 is OK')
class CircleTest(unittest.TestCase):
    def setUp(self):
        self.circle = Circle(0, 0, 5)

    def test_canary_test(self):
        self.assertTrue(True)

    def test_create_circle(self):

        self.assertEqual(self.circle.radius, 5)

    def test_center_of_circle(self):

        self.assertEqual((0, 0), self.circle.center)

    def test_move_circle(self):
        self.circle.set_location(3, 3)

        self.assertEqual((3, 3), self.circle.center)

    def test_point_outside_circle(self):

        self.assertFalse(self.circle.is_point_on(6, 6))

    def test_point_outside_top_of_circle(self):

        self.assertFalse(self.circle.is_point_on(0, 6))

    def test_point_outside_right_of_circle(self):

        self.assertFalse(self.circle.is_point_on(6, 0))

    def test_point_outside_left_of_circle(self):

        self.assertFalse(self.circle.is_point_on(-6, 0))

    def test_point_outside_bottom_of_circle(self):

        self.assertFalse(self.circle.is_point_on(0, -6))

    def test_get_location(self):
        self.circle.set_location(3, 3)

        self.assertEqual((3, 3), self.circle.get_location())

    def test_point_inside_circle(self):

        self.assertTrue(self.circle.is_point_on(-3, 0))

    def test_point_on_circle(self):

        self.assertTrue(self.circle.is_point_on(4, 3))

    def test_move_circle_and_check_if_point_inside_circle(self):

        self.circle.set_location(5, 5)

        self.assertTrue(self.circle.is_point_on(6, 5))

    def test_check_if_circle_in_selection_region(self):

        self.circle.set_location(1, 1)

        self.assertTrue(self.circle.is_shape_in_region(0, 0, 15, 15))

    def test_move_by(self):
        self.circle.set_location(6, 9)
        self.circle.move_by(0, -3)

        self.assertEqual((6, 6),
                         (self.circle.center[0], self.circle.center[1]))
 def setUp(self):
     self.circle = Circle(0, 0, 5)
 def test_add_circle_to_diagram(self):
   circle1 = Circle(0, 0, 3)
   
   self.diagram.add_shape(circle1)
   
   self.assertEqual([circle1], self.diagram.shapes)
  def test_ungroup_something_thats_not_a_group(self):
    circle1 = Circle(0, 0, 2)
    self.diagram.ungroup(circle1)

    self.assertEqual(0, len(self.diagram.shapes))
 def test_save_diagram_with_one_circle_and_one_rectangle(self):
   self.diagram.add_shape(Circle(0, 0, 3))
   self.diagram.add_shape(Rectangle(0, 0, 4, 2))
   
   self.assertEqual(bytes, type(self.diagram.convert_data()))
 def test_ungroup_a_nonexistent_group_from_a_diagram(self):
   group = Group([Circle(10, 10, 5), Circle(20, 20, 5)])
   self.diagram.ungroup(group)
   
   self.assertEqual(0, len(self.diagram.shapes))