def add_tips(self): linea_referencia = Line(self[0][0].get_start(), self[0][-1].get_end()) vector_unitario = linea_referencia.get_unit_vector() punto_final1 = self[0][-1].get_end() punto_inicial1 = punto_final1 - vector_unitario * self.size_arrows punto_inicial2 = self[0][0].get_start() punto_final2 = punto_inicial2 + vector_unitario * self.size_arrows lin1_1 = Line(punto_inicial1, punto_final1).set_color(self[0].get_color()).set_stroke( None, self.stroke) lin1_2 = lin1_1.copy() lin2_1 = Line(punto_inicial2, punto_final2).set_color(self[0].get_color()).set_stroke( None, self.stroke) lin2_2 = lin2_1.copy() lin1_1.rotate(self.ang_arrows, about_point=punto_final1, about_edge=punto_final1) lin1_2.rotate(-self.ang_arrows, about_point=punto_final1, about_edge=punto_final1) lin2_1.rotate(self.ang_arrows, about_point=punto_inicial2, about_edge=punto_inicial2) lin2_2.rotate(-self.ang_arrows, about_point=punto_inicial2, about_edge=punto_inicial2) return self.add(lin1_1, lin1_2, lin2_1, lin2_2)
def __init__(self, text, texmob=None, **kwargs): digest_config(self, kwargs) VGroup.__init__(self, **kwargs) pre_coord_dl = text.get_corner(DL) pre_coord_ur = text.get_corner(UR) reference_line = Line(pre_coord_dl, pre_coord_ur) reference_unit_vector = reference_line.get_unit_vector() coord_dl = text.get_corner( DL) - text.get_center() - reference_unit_vector * self.buff_line coord_ur = text.get_corner( UR) - text.get_center() + reference_unit_vector * self.buff_line if texmob == None: line = Line(coord_dl, coord_ur, **self.line_kwargs) self.add(line) else: arrow = Arrow(coord_dl, coord_ur, **self.line_kwargs) unit_vector = arrow.get_unit_vector() if self.buff_text == None: self.buff_text = get_norm( (texmob.get_center() - texmob.get_critical_point(unit_vector)) / 2) * 2 texmob.move_to(arrow.get_end() + unit_vector * self.buff_text) self.add(arrow, texmob)
def __init__(self, path, partitions=120, **kwargs): VMobject.__init__(self, **kwargs) coords = [] for p in range(int(partitions) + 1): coord_i = path.point_from_proportion((p * 0.989 / partitions) % 1) coord_f = path.point_from_proportion( (p * 0.989 / partitions + 0.001) % 1) reference_line = Line(coord_i, coord_f).rotate(self.sign * PI / 2, about_point=coord_i) normal_unit_vector = reference_line.get_unit_vector() static_vector = normal_unit_vector * self.length random_dx = random.randint(0, self.dx_random) random_normal_vector = random_dx * normal_unit_vector / 100 point_coord = coord_i + random_normal_vector + static_vector coords.append(point_coord) if self.close: coords.append(coords[0]) self.set_points_smoothly(coords)