Advertisement
epicycloids

Locus Demo

Aug 14th, 2019
790
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.74 KB | None | 0 0
  1. class Locus(Scene):
  2.   def construct(self):
  3.     circle = Circle(radius=3, color=GREY)
  4.     point_A = Dot(point=circle.point_from_proportion(0.5),color=BLUE_C)
  5.     point_B = Dot(point=circle.point_from_proportion(0.85),color=BLUE_C)
  6.     point_C = Dot(point=circle.point_from_proportion(0.1),color=BLUE_C)
  7.     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)
  8.     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)
  9.     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)
  10.    
  11.     moving_point = Dot(point=circle.point_from_proportion(point_value.get_value()),color=GREEN)
  12.     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)
  13.     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)
  14.     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)
  15.     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)
  16.  
  17.     trace = VGroup()
  18.     collective = VGroup(follow_line,trace,moving_point,proj_AB,proj_BC,proj_AC)
  19.    
  20.     self.add(circle,trace,collective,line_AB,line_AC,line_BC,point_A,point_B,point_C)
  21.    
  22.     def update(obj,dt):
  23.       alpha = interpolate(0.65,2.65,dt)
  24.       moving_point.become(Dot(point=circle.point_from_proportion(math.modf(alpha)[0]),color=GREEN))
  25.       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))
  26.       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))
  27.       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))
  28.       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))
  29.       trace.add(follow_line.deepcopy())
  30.    
  31.     self.wait()
  32.     self.play(UpdateFromAlphaFunc(collective,update),rate_func=linear,run_time=3)
  33.     self.wait()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement