Source code for gbvision.utils.shapes.base_circle

from typing import List

import cv2

from gbvision.constants.math import SQRT_PI

from .base_shape import BaseShape
from gbvision.constants.types import Circle, Number, Point, Rect, Frame, Color


[docs]class BaseCircle(BaseShape):
[docs] @staticmethod def set_center(shape: Circle, new_center: Point) -> Circle: return new_center, shape[1]
@staticmethod def _unsafe_draw(frame: Frame, shape: Circle, color: Color, *args, **kwargs) -> None: cv2.circle(frame, (int(shape[0][0]), int(shape[0][1])), int(shape[1]), color, *args, **kwargs)
[docs] @staticmethod def to_bounding_rect(shape: Circle) -> Rect: rect = (shape[0][0] - shape[1], shape[0][1] - shape[1], 2 * shape[1], 2 * shape[1]) return rect
[docs] @staticmethod def from_bounding_rect(bounding_rect: Rect) -> Circle: circle = ( (bounding_rect[0] + bounding_rect[2] / 2, bounding_rect[1] + bounding_rect[3] / 2), (bounding_rect[3] + bounding_rect[2]) / 4) return circle
from_contour = cv2.minEnclosingCircle
[docs] @staticmethod def center(shape: Circle) -> Point: return shape[0]
[docs] @staticmethod def collision(shape1: Circle, shape2: Circle) -> bool: center1, r1 = shape1 center2, r2 = shape2 return (center1[0] - center2[0]) ** 2 + (center1[1] - center2[1]) ** 2 < (r1 + r2) ** 2
[docs] @classmethod def area(cls, shape: Circle) -> Number: return cls.root_area(shape) ** 2
[docs] @classmethod def root_area(cls, shape: Circle) -> Number: return shape[1] * SQRT_PI
[docs] @classmethod def sort(cls, shapes: List[Circle]): return sorted(shapes, key=cls.root_area)