1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
from manimlib.imports import *
def field_func(coordinate):
x,y = coordinate[:2]
return np.array([
-y,
x,
0
])
class Paddlewheel(ThreeDScene):
def construct(self):
axes = ThreeDAxes()
#self.add(axes)
text = TextMobject("Insert the paddle into the flow of water").shift(3*DOWN).add_background_rectangle()
text_a = TextMobject("The rotation of the wheel is proportional to the component of curl in the direction of the axle").shift(3*DOWN).scale(0.7)
vec_field = VectorField(field_func, x_min =-4, x_max = 4, y_min =-4, y_max =4)
self.set_camera_orientation(phi=0*DEGREES,theta=0*DEGREES,distance=40)
lines_a = StreamLines(
field_func,
virtual_time=3,
min_magnitude=0,
max_magnitude=3,
).set_color_by_gradient([WHITE, BLUE_E])
flow = AnimatedStreamLines(
lines_a,
line_anim_class=ShowPassingFlashWithThinningStrokeWidth
)
paddle = VGroup(Line(np.array([3, 0, 0]), np.array([-3, 0, 0])),
Line(np.array([0, 3, 0]), np.array([0, -3, 0]))).set_stroke(width = 8).set_color(YELLOW_E)
cylinder = ParametricSurface(
lambda u, v: np.array([
0.1*np.cos(u),
0.1*np.sin(u),
v,
]),
u_min = 0, u_max = 2*np.pi, v_min = -0.2, v_max = 3.5, checkerboard_colors = [YELLOW_E, YELLOW_E]).fade(0.5)
plane = ParametricSurface(lambda u, v: np.array([u, v, 0]), checkerboard_colors = [WHITE, WHITE]).fade(0.9)
self.add(paddle, cylinder, flow)
self.add_fixed_in_frame_mobjects(text)
self.play(Rotating(paddle))
self.wait()
self.play(FadeIn(vec_field))
self.remove(flow, text)
self.bring_to_front(cylinder)
#self.play(Rotating(paddle))
self.wait()
self.add_fixed_in_frame_mobjects(text_a)
#self.play(ReplacementTransform(text, text_a))
self.move_camera(phi=60*DEGREES,theta=30*DEGREES)
self.wait()
|