def process_param_special(self, cmd):

        assert (len(cmd) == 3)

        ps = [Point(p) for p in cmd[1]]
        for p in ps:
            self.register_pt(p)

        param_method = cmd[2]

        if isinstance(param_method, str):
            p_method = param_method.lower()
            assert (p_method
                    in ["triangle", "acute-tri", "equi-tri", "polygon"])
            instr = Sample(ps, p_method)  # No extra args here
            self.instructions.append(instr)
        elif isinstance(param_method, tuple):
            assert (len(param_method) == 2)
            head, arg = param_method
            head = head.lower()
            assert (head in ["right-tri", "iso-tri", "acute-iso-tri"])
            assert (isinstance(arg, str) and Point(arg) in ps)
            special_p = Point(arg)  # Not coming in as Point
            instr = Sample(ps, head, (special_p, ))
            self.instructions.append(instr)
        else:
            raise RuntimeError("Invalid joint param method")

        n_gon_color = np.random.rand(3)
        for i in range(len(ps)):
            self.segments.append((ps[i], ps[(i + 1) % (len(ps))]))
            self.seg_colors.append(n_gon_color)
Example #2
0
 def __init__(self, x=0, y=0, amount=FOOD_AMOUNT, random=False):
     self.id = uuid.uuid4()
     self.body = Point(x=x, y=y, color=(0, 255, 0), random=random)
     if random:
         self.position = Vector(self.body.x, self.body.y)
     else:
         self.position = Vector(x, y)
     self.amount = amount
Example #3
0
 def __init__(self, *args, **kwargs):
     super(MyWindow, self).__init__(*args, **kwargs)
     self.set_minimum_size(400, 300)
     # pyglet.gl.glClearColor(0.2, 0.3, 0.2, 1.0)
     self.line = Line()
     self.triangle = Triangle(100, 100)
     self.point = Point(200, 200)
     self.objects = []
     self.food_manager = FoodManager()
     self.creature_manager = CreatureManager()
     self.life_breath()
    def replace_points(self, points: List[Tuple[int, int]]) -> None:
        """
        This method allows updating any existing points and automatically
        creating new points.
        """

        idx = 0
        ln = len(self.points)
        for x, y in points:
            if idx < ln:
                p = self.points[idx]
                p.x = x
                p.y = y
            else:
                self.points.append(Point(x, y))
            idx += 1
    def compute(self, cmd):
        assert (len(cmd) == 4)

        obj_name = cmd[1]
        assert (isinstance(obj_name, str))

        obj_type = cmd[2].lower()
        assert (obj_type in ["point", "line", "circle"])

        if obj_type == "point":
            p = Point(obj_name)
            self.register_pt(p)

            computation = self.process_point(cmd[3], unnamed=False)
            assert (not isinstance(computation.val, str))

            c_instr = Compute(p, computation)
            self.instructions.append(c_instr)
        elif obj_type == "line":
            l = Line(obj_name)
            self.register_line(l)

            computation = self.process_line(cmd[3], unnamed=False)
            assert (not isinstance(computation.val, str))

            c_instr = Compute(l, computation)
            self.instructions.append(c_instr)

        elif obj_type == "circle":
            c = Circle(obj_name)
            self.register_circ(c)

            computation = self.process_circle(cmd[3], unnamed=False)
            assert (not isinstance(computation.val, str))

            c_instr = Compute(c, computation)
            self.instructions.append(c_instr)

        else:
            raise RuntimeError("Invalid define type")
    def param(self, cmd):
        assert (len(cmd) == 3 or len(cmd) == 4)

        obj_type = cmd[2].lower()
        assert (obj_type in ["point", "line", "circle"])

        if obj_type == "line":
            l = Line(cmd[1])
            self.register_line(l)

            param_method = "line"
            if len(cmd) == 4:
                param_method = cmd[3]
            pred, args = self.process_param_line(param_method)
            p_instr = Parameterize(l, (pred, args))
            self.instructions.append(p_instr)
        elif obj_type == "circle":
            c = Circle(cmd[1])
            self.register_circ(c)

            param_method = "circle"
            if len(cmd) == 4:
                param_method = cmd[3]
            pred, args = self.process_param_circ(param_method)
            p_instr = Parameterize(c, (pred, args))
            self.instructions.append(p_instr)
        else:
            p = Point(cmd[1])
            self.register_pt(p)

            param_method = "coords"
            if len(cmd) == 4:
                param_method = cmd[3]
            pred, args = self.process_param_point(param_method)
            p_instr = Parameterize(p, (pred, args))
            self.instructions.append(p_instr)
 def insert_point(self, idx: int, x: int, y: int) -> None:
     self.points.insert(idx, Point(x, y))
 def add_point(self, x: int, y: int) -> None:
     self.points.append(Point(x, y))
 def from_list(points: List[Tuple[int, int]]):
     return PolygonHelper(*[Point(x, y) for x, y in points])
    def process_point(self, p_info, unnamed=True):
        if isinstance(p_info, str) and not is_number(p_info):
            assert (Point(p_info) in self.points)
            return Point(p_info)
        if not isinstance(p_info, tuple):
            raise NotImplementedError(
                f"[process_point] p_info must be tuple or string")

        p_pred = p_info[0].lower()
        p_args = p_info[1:]

        p_val = None

        if p_pred == "inter-ll":
            assert (len(p_args) == 2)
            l1 = self.process_line(p_args[0])
            l2 = self.process_line(p_args[1])
            p_val = FuncInfo(p_pred, (l1, l2))
        elif p_pred in ["isogonal-conj", "isotomic-conj"]:
            assert (len(p_args) == 4)
            ps = [self.process_point(p) for p in p_args]
            p_val = FuncInfo(p_pred, tuple(ps))
        elif p_pred == "harmonic-conj":
            assert (len(p_args) == 3)
            ps = [self.process_point(p) for p in p_args]
            p_val = FuncInfo(p_pred, tuple(ps))
        elif p_pred in ["incenter", "excenter", "mixtilinear-incenter"]:
            assert (len(p_args) == 3)
            ps = [self.process_point(p) for p in p_args]
            p_val = FuncInfo(p_pred, tuple(ps))
        elif p_pred == "inter-lc":
            assert (len(p_args) == 3)
            l = self.process_line(p_args[0])
            c = self.process_circle(p_args[1])
            rs = self.process_rs(p_args[2])
            p_val = FuncInfo(p_pred, (l, c, rs))
        elif p_pred == "inter-cc":
            assert (len(p_args) == 3)
            c1 = self.process_circle(p_args[0])
            c2 = self.process_circle(p_args[1])
            rs = self.process_rs(p_args[2])
            p_val = FuncInfo(p_pred, (c1, c2, rs))
        elif p_pred in ["midp", "midp-from"]:
            assert (len(p_args) == 2)
            ps = [self.process_point(p) for p in p_args]
            p_val = FuncInfo(p_pred, tuple(ps))
        elif p_pred == "foot":
            assert (len(p_args) == 2)
            p = self.process_point(p_args[0])
            l = self.process_line(p_args[1])
            p_val = FuncInfo(p_pred, (p, l))
        elif p_pred == "reflect-pl":
            assert (len(p_args) == 2)
            p = self.process_point(p_args[0])
            l = self.process_line(p_args[1])
            p_val = FuncInfo(p_pred, (p, l))
        elif p_pred in ["orthocenter", "circumcenter", "centroid", "incenter"]:
            assert (len(p_args) == 3)
            ps = [self.process_point(p) for p in p_args]
            p_val = FuncInfo(p_pred, tuple(ps))
        elif p_pred == "origin":
            assert (len(p_args) == 1)
            circ = self.process_circle(p_args[0])
            p_val = FuncInfo(p_pred, (circ, ))
        elif p_pred in ["amidp-opp", "amidp-same"]:
            assert (len(p_args) == 3)
            ps = [self.process_point(p) for p in p_args]
            p_val = FuncInfo(p_pred, tuple(ps))

        if p_val is not None:
            P = Point(p_val)
            if unnamed:
                self.unnamed_points.append(P)
            return P
        else:
            raise NotImplementedError(
                f"[process_point] Unrecognized p_pred {p_pred}")