def test_scale_returns_new_circle_which_is_a_scaled_version_of_input_one(
         self):
     circle = Circle(Point(3, 0), 10)
     new_circle = circle.offset(Point(3, 3))
     self.assertEqual(new_circle.x(), 6)
     self.assertEqual(new_circle.y(), 3)
     self.assertEqual(new_circle.radius(), 10)
 def test_contains_point_returns_true_if_the_specified_point_is_within_radius(
         self):
     circle = Circle(Point(0, 0), 10)
     point_center = Point(0, 0)
     self.assertTrue(circle.contains_point(point_center))
     point_middle = Point(5, 5)
     self.assertTrue(circle.contains_point(point_middle))
Exemplo n.º 3
0
 def test_draw_circle_thickness_equals_one(self):
     img = Image.blank(40, 40)
     circle = Circle(Point(20, 20), 10)
     img.draw_circle(circle, Color(200, 200, 200), 1)
     self.assertEquals(img.img[10][20][1], 200)
     self.assertEquals(img.img[9][20][1], 0)
     self.assertEquals(img.img[11][20][1], 0)
Exemplo n.º 4
0
    def _sanitize_circles(raw_circles):
        circles = []
        if raw_circles is not None:
            for raw in raw_circles[0]:
                center = Point(int(raw[0]), int(raw[1]))
                radius = int(raw[2])
                circles.append(Circle(center, radius))

        return circles
def CIRCLES_DEMO():
    """ Draw a set of axes and a random set of circles. Perform a series of
    random transformations on the circles.
    """
    # Create a set of random circles
    points = []
    for i in range(10):
        X = (random.random()) * 200
        Y = (random.random()) * 200
        points.append(Point(X, Y))

    for i in range(10):
        # Create random transformation
        angle = random.random() * 2 * math.pi
        scale = random.random() * 3
        delX = (random.random() - 0.5) * 200
        delY = (random.random() - 0.5) * 200
        translate = Point(delX, delY)
        trs = Transform(translate, angle, scale)

        # Display on image
        image = Image.blank(1000, 800)
        image.draw_offset = IMG_CENTER
        draw_axes(image, 300)

        # Draw the circles and transformed circles on the image
        radius = 10
        for p in points:
            circle = Circle(p, radius)
            trans_circle = Circle(trs.transform(p), radius * trs.zoom)
            image.draw_circle(circle, Color.Red())
            image.draw_circle(trans_circle, Color.Blue())

        # Write the transformation on the image
        image.draw_text(trs.__str__(),
                        Point(-450, 350),
                        Color.White(),
                        centered=False,
                        scale=0.5,
                        thickness=1)

        # Show the image
        image.popup()
Exemplo n.º 6
0
    def test_circle_is_correctly_detected_when_there_there_are_two_circles_in_the_image_not_intersecting(
            self):

        img = Image.blank(100, 100)
        circle_a = Circle(Point(20, 20), 10)
        circle_b = Circle(Point(50, 50), 10)
        img.draw_circle(circle_a, Color(10, 50, 100), 2)
        img.draw_circle(circle_b, Color(10, 50, 100), 2)
        grey = img.to_grayscale()

        decorator = CircleDetector()
        decorator.set_maximum_radius(20)
        decorator.set_minimum_radius(5)
        decorator.set_accumulator_threshold(30)
        decorator.set_canny_threshold(30)
        decorator.set_minimum_separation(10)

        list = decorator.find_circles(grey)

        self.assertEqual(list.__len__(), 2)
Exemplo n.º 7
0
    def test_circle_is_correctly_detected_when_there_is_one_circle_in_the_image(
            self):
        img = Image.blank(40, 40)
        circle = Circle(Point(20, 20), 10)
        img.draw_circle(circle, Color(200, 200, 200), 2)
        grey = img.to_grayscale()
        #parameters of the detector very important - a bit dubious test
        decorator = CircleDetector()
        decorator.set_maximum_radius(20)
        decorator.set_minimum_radius(5)
        decorator.set_accumulator_threshold(20)
        decorator.set_canny_threshold(20)

        list = decorator.find_circles(grey)

        self.assertEqual(list.__len__(), 1)
        # self.assertEqual(list[0].radius(), circle.radius())
        #self.assertEqual(list[0].center().x, circle.center().x + 1)
        #self.assertEqual(list[0].center().y, circle.center().y + 1)
        self.assertEqual(list[0].area(), circle.area())
Exemplo n.º 8
0
    def deserialize(string):
        """ Generate a BlankGeometry object from a string representation. """
        circle_strs = string.split(BlankGeometry._SERIAL_DELIM)

        barcode_bounds = []
        for string in circle_strs:
            circle = Circle.deserialize(string)
            barcode_bounds.append(circle)

        geo = BlankGeometry([])
        geo._barcode_bounds = barcode_bounds
        return geo
Exemplo n.º 9
0
 def test_draw_circle_thickness_equals_four(self):
     img = Image.blank(40, 40)
     circle = Circle(Point(20, 20), 10)
     img.draw_circle(circle, Color(200, 200, 200), 4)
     self.assertEquals(img.img[6][20][1], 0)
     self.assertEquals(img.img[7][20][1], 0)  #!!
     self.assertEquals(img.img[8][20][1], 200)
     self.assertEquals(img.img[10][20][1], 200)
     self.assertEquals(img.img[9][20][1], 200)
     self.assertEquals(img.img[11][20][1], 200)
     self.assertEquals(img.img[12][20][1], 200)
     self.assertEquals(img.img[13][20][1], 0)  #!!
     self.assertEquals(img.img[14][20][1], 0)
Exemplo n.º 10
0
    def test_draw_circle_centre_is_kept(self):
        img = Image.blank(40, 40)
        circle = Circle(Point(20, 20), 1)
        img.draw_circle(circle, Color(200, 200, 200), 1)
        self.assertEquals(img.img[18][20][1], 0)
        self.assertEquals(img.img[19][20][1], 200)
        self.assertEquals(img.img[20][20][1], 0)
        self.assertEquals(img.img[21][20][1], 200)
        self.assertEquals(img.img[22][20][1], 0)

        self.assertEquals(img.img[20][18][1], 0)
        self.assertEquals(img.img[20][19][1], 200)
        self.assertEquals(img.img[20][20][1], 0)
        self.assertEquals(img.img[20][21][1], 200)
        self.assertEquals(img.img[20][22][1], 0)
Exemplo n.º 11
0
    def calculate_slot_bounds(center, radius, rotation):
        """ Calculates the bounds (position and radius) of all of the slots in the puck, based on the
        puck's geometry (position, size, and angle)."""
        # Calculate pin slot locations
        layer_counts = Template.N
        layer_radii = Template.LAYER_RADII
        slot_radius = radius * Template.SLOT_RADIUS

        slot_bounds = []
        for i, layer_count in enumerate(layer_counts):
            layer_radius = layer_radii[i] * radius

            for j in range(layer_count):
                angle = (2.0 * math.pi * -j / layer_count) - (math.pi /
                                                              2.0) + rotation
                x = int(center.x + layer_radius * math.cos(angle))
                y = int(center.y + layer_radius * math.sin(angle))
                slot_center = Point(x, y)
                bounds = Circle(slot_center, slot_radius)
                slot_bounds.append(bounds)

        return slot_bounds
Exemplo n.º 12
0
 def center_bounds(self):
     return Circle(self._center, self.center_radius())
Exemplo n.º 13
0
 def bounds(self):
     return Circle(self._center, self._radius)
 def test_intersects_returns_false_when_two_circles_touch_with_boarders(
         self):
     circle_a = Circle(Point(0, 0), 10)
     circle_b = Circle(Point(20, 0), 10)
     self.assertFalse(circle_a.intersects(circle_b))
     self.assertFalse(circle_b.intersects(circle_a))
 def test_intersect_returns_false_when_circles_dont_touch(self):
     circle_a = Circle(Point(0, 0), 10)
     circle_b = Circle(Point(20, 0), 2)
     self.assertFalse(circle_a.intersects(circle_b))
     self.assertFalse(circle_b.intersects(circle_a))
 def test_intersects_returns_true_when_two_circles_properly_intersect(self):
     circle_a = Circle(Point(0, 0), 10)
     circle_b = Circle(Point(20, 0), 15)
     self.assertTrue(circle_a.intersects(circle_b))
     self.assertTrue(circle_b.intersects(circle_a))
 def test_intersects_returns_true_for_two_same_circles(self):
     circle_a = Circle(Point(4, 5), 14)
     circle_b = Circle(Point(4, 5), 14)
     self.assertTrue(circle_a.intersects(circle_b))
     self.assertTrue(circle_b.intersects(circle_a))
 def test_circumference_is_2pi_r(self):
     new_circle = Circle(Point(4, 0), 4)
     self.assertEqual(new_circle.circumference(), math.pi * 8)
 def test_string_representation_of_circle(self):
     new_circle = Circle(Point(0, 0), 10)
     self.assertEqual(new_circle.__str__(),
                      "Circle - center = (0.00, 0.00); radius = 10.00")
 def test_center_returns_correct_point(self):
     new_circle = Circle(Point(1, 2), 3)
     self.assertEqual(new_circle.center().x, 1)
     self.assertEqual(new_circle.center().y, 2)
 def test_x_y_radius_return_correct_values(self):
     new_circle = Circle(Point(4, 5), 10)
     self.assertEqual(new_circle.x(), 4)
     self.assertEqual(new_circle.y(), 5)
     self.assertEqual(new_circle.radius(), 10)
 def test_offset_returns_new_circe_of_same_radius_but_shifted_center(self):
     circle = Circle(Point(3, 0), 10)
     new_circle = circle.offset(Point(3, 3))
     self.assertEqual(new_circle.x(), 6)
     self.assertEqual(new_circle.y(), 3)
     self.assertEqual(new_circle.radius(), 10)
 def test_area_is_2pi_r2(self):
     new_circle = Circle(Point(9, 0), 10)
     self.assertEqual(new_circle.area(), math.pi * 100)
 def test_intersects_returns_true_when_one_circle_inside_the_other(self):
     circle_a = Circle(Point(0, 0), 10)
     circle_b = Circle(Point(0, 0), 5)
     self.assertTrue(circle_a.intersects(circle_b))
     self.assertTrue(circle_b.intersects(circle_a))
Exemplo n.º 25
0
 def _set_barcode_bounds(self, barcodes):
     self._barcode_bounds = []
     for barcode in barcodes:
         bounds = barcode.bounds()
         bounds = Circle(bounds.center(), int(bounds.radius()))
         self._barcode_bounds.append(bounds)
 def test_diameter_twice_radius(self):
     new_circle = Circle(Point(0, 0), 4)
     self.assertEqual(new_circle.diameter(), 8)
 def test_contains_point_returns_false_if_the_specified_point_is_on_the_edge(
         self):
     circle = Circle(Point(0, 0), 10)
     point_edge = Point(10, 0)
     self.assertFalse(
         circle.contains_point(point_edge))  # edge points not included
 def test_contains_point_returns_false_if_the_specified_point_is_not_within_radius(
         self):
     circle = Circle(Point(0, 0), 10)
     point_external = Point(20, 0)
     self.assertFalse(circle.contains_point(point_external))