Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Locus(Scene):
- def construct(self):
- circle = Circle(radius=3, color=GREY)
- point_A = Dot(point=circle.point_from_proportion(0.5),color=BLUE_C)
- point_B = Dot(point=circle.point_from_proportion(0.85),color=BLUE_C)
- point_C = Dot(point=circle.point_from_proportion(0.1),color=BLUE_C)
- line_AB = ParametricFunction(function=lambda t: point_A.get_arc_center()+t*(point_A.get_arc_center()-point_B.get_arc_center()), t_min=-10,t_max=10,color=GREY)
- line_BC = ParametricFunction(function=lambda t: point_B.get_arc_center()+t*(point_B.get_arc_center()-point_C.get_arc_center()), t_min=-10,t_max=10,color=GREY)
- line_AC = ParametricFunction(function=lambda t: point_A.get_arc_center()+t*(point_A.get_arc_center()-point_C.get_arc_center()), t_min=-10,t_max=10,color=GREY)
- moving_point = Dot(point=circle.point_from_proportion(point_value.get_value()),color=GREEN)
- proj_AB = Dot(point=point_B.get_arc_center()+np.dot(moving_point.get_arc_center()-point_B.get_arc_center(),point_A.get_arc_center()-point_B.get_arc_center())/np.dot(point_A.get_arc_center()-point_B.get_arc_center(),point_A.get_arc_center()-point_B.get_arc_center())*(point_A.get_arc_center()-point_B.get_arc_center()),color=YELLOW)
- proj_BC = Dot(point=point_C.get_arc_center()+np.dot(moving_point.get_arc_center()-point_C.get_arc_center(),point_B.get_arc_center()-point_C.get_arc_center())/np.dot(point_B.get_arc_center()-point_C.get_arc_center(),point_B.get_arc_center()-point_C.get_arc_center())*(point_B.get_arc_center()-point_C.get_arc_center()),color=YELLOW)
- proj_AC = Dot(point=point_C.get_arc_center()+np.dot(moving_point.get_arc_center()-point_C.get_arc_center(),point_A.get_arc_center()-point_C.get_arc_center())/np.dot(point_A.get_arc_center()-point_C.get_arc_center(),point_A.get_arc_center()-point_C.get_arc_center())*(point_A.get_arc_center()-point_C.get_arc_center()),color=YELLOW)
- follow_line = ParametricFunction(function=lambda t: proj_AB.get_arc_center()+t*(proj_AB.get_arc_center()-proj_BC.get_arc_center()), t_min=-10,t_max=10,color=RED)
- trace = VGroup()
- collective = VGroup(follow_line,trace,moving_point,proj_AB,proj_BC,proj_AC)
- self.add(circle,trace,collective,line_AB,line_AC,line_BC,point_A,point_B,point_C)
- def update(obj,dt):
- alpha = interpolate(0.65,2.65,dt)
- moving_point.become(Dot(point=circle.point_from_proportion(math.modf(alpha)[0]),color=GREEN))
- proj_AB.become(Dot(point=point_B.get_arc_center()+np.dot(moving_point.get_arc_center()- point_B.get_arc_center(),point_A.get_arc_center()-point_B.get_arc_center())/np.dot(point_A.get_arc_center()-point_B.get_arc_center(),point_A.get_arc_center()-point_B.get_arc_center())*(point_A.get_arc_center()-point_B.get_arc_center()),color=YELLOW))
- proj_BC.become(Dot(point=point_C.get_arc_center()+np.dot(moving_point.get_arc_center()-point_C.get_arc_center(),point_B.get_arc_center()-point_C.get_arc_center())/np.dot(point_B.get_arc_center()-point_C.get_arc_center(),point_B.get_arc_center()-point_C.get_arc_center())*(point_B.get_arc_center()-point_C.get_arc_center()),color=YELLOW))
- proj_AC.become(Dot(point=point_C.get_arc_center()+np.dot(moving_point.get_arc_center()-point_C.get_arc_center(),point_A.get_arc_center()-point_C.get_arc_center())/np.dot(point_A.get_arc_center()-point_C.get_arc_center(),point_A.get_arc_center()-point_C.get_arc_center())*(point_A.get_arc_center()-point_C.get_arc_center()),color=YELLOW))
- follow_line.become(ParametricFunction(function=lambda t: proj_AB.get_arc_center()+t*(proj_AB.get_arc_center()-proj_BC.get_arc_center()), t_min=-10,t_max=10,color=RED))
- trace.add(follow_line.deepcopy())
- self.wait()
- self.play(UpdateFromAlphaFunc(collective,update),rate_func=linear,run_time=3)
- self.wait()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement