summaryrefslogtreecommitdiff
path: root/FSF-2020/calculus-of-several-variables/div-curl-grad-and-all-that/Conservative fields/Conservative_file4_path-dependent.py
blob: cb951e7745b3e97e9d40210dc8591d171a58d799 (plain)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
from manimlib.imports import *
import numpy as np

def func(coordinate):
	x,y = coordinate[:2]
	return np.array([
		y,
		-x,
		0
	])




class many_paths(GraphScene):
	CONFIG = {
			"x_min" : 0,
			"x_max" : 8.5,
			"x_axis_height": 8.5,
			"y_min" : 0,
			"y_max" : 8.5,
			"y_axis_height": 8.5,
			"graph_origin" : ORIGIN, 
			"function_color" : RED,
 
		} 
	def construct(self):
		self.setup_axes(animate=False)
		self.remove(self.x_axis, self.y_axis)
		background = VectorField(func,
			x_min = 0, x_max = 8.5, y_min = 0, y_max = 8.5, colors = ["#DBD8AE"]
			)
		
		pointer = Dot(np.array([0, 1.5, 0])).scale(0.7).set_color_by_gradient(["#84732B", YELLOW_E])
		start = np.array([0, 1.5, 0])
		end = np.array([7.53, 5.043, 0])
		path_one= self.get_graph(self.one, x_min = 0, x_max = 7.53)
		path_two= self.get_graph(self.two, x_min = 0, x_max = 7.53)
		path_three = self.get_graph(self.three, x_min = 0, x_max = 7.53)

		group = VGroup(path_one, path_two, background, path_three).move_to(np.array([-3,0, 0])).scale(0.75)


		
		path_one.set_color("#F6523C")
		path_two.set_color("#80475E")
		path_three.set_color("#0F7173")

		# all the text
		#function = TexMobject(r"f(x,y) = -(x^2 + y^2)").scale(0.6).set_color("#DBD8AE").shift(3.6*UP + 3*LEFT)
		field = TexMobject(r"\vec F = y\hat i - x\hat j").set_color("#DBD8AE").shift(3.6*DOWN + 3*LEFT)
		c1 = TexMobject(r"C_{1}: y = 6sin(\frac{x}{3} + 1.5)").scale(0.7).set_color("#0F7173").shift(3*UP + 4*RIGHT)
		#c3 = TexMobject(r"C_{3}: y = 6sin(\frac{x}{3} + 1.5)").scale(0.7).set_color("#0F7173").next_to(li_path2, DOWN, buff = LARGE_BUFF)
		li_path1 = TexMobject(r"\int_{C_{1}} \vec F \cdot \vec dr = ").set_color("#0F7173").next_to(c1, DOWN, buff = 0.2)
		c2 = TexMobject(r"C_{2}: y = 0.47x + 1.5").scale(0.7).set_color("#80475E").next_to(li_path1, DOWN, buff = 0.4)
		li_path2 = TexMobject(r"\int_{C_{2}} \vec F \cdot \vec dr = ").set_color("#80475E").next_to(c2, DOWN, buff = 0.2)
		c3 = TexMobject(r"C_{3}: y = \frac{x^{16}}{2} + 1.5").scale(0.7).set_color("#F6523C").next_to(li_path2, DOWN, buff = 0.4)
		li_path3 = TexMobject(r"\int_{C_{3}} \vec F \cdot \vec dr = ").set_color("#F6523C").next_to(c3, DOWN, buff = 0.2)

		cs = VGroup(c1, c2, c3)


		c_1 = lambda x: c1_value.get_value()
		c_2 = lambda x: c2_value.get_value()
		c_3 = lambda x: c3_value.get_value()

		c1_value = ValueTracker(0)
		c2_value = ValueTracker(0)
		c3_value = ValueTracker(0)

		c1_tex = DecimalNumber(c1_value.get_value()).add_updater(lambda v: v.set_value(c1_value.get_value())).next_to(li_path1, RIGHT, buff = SMALL_BUFF).set_color("#0F7173")
		c2_tex = DecimalNumber(c2_value.get_value()).add_updater(lambda v: v.set_value(c2_value.get_value())).next_to(li_path2, RIGHT, buff = SMALL_BUFF).set_color("#80475E")
		c3_tex = DecimalNumber(c3_value.get_value()).add_updater(lambda v: v.set_value(c3_value.get_value())).next_to(li_path3, RIGHT, buff = SMALL_BUFF).set_color("#F6523C")


		paths = VGroup(li_path1, li_path2, li_path3, c1_tex, c2_tex, c3_tex)














		


		self.play(ShowCreation(field), ShowCreation(background))
		self.wait()
		self.play(ShowCreation(path_one), ShowCreation(path_two), ShowCreation(path_three), ShowCreation(cs))
		self.wait(2)
		self.add(c1_tex)
		self.play(ShowCreation(li_path1))
		self.play(MoveAlongPath(pointer, path_three), c1_value.set_value,-49.67,
			rate_func=linear,
			run_time=3
			)
		self.wait(2)
		self.play(ShowCreation(li_path2))
		self.add(c2_tex)
		self.play(MoveAlongPath(pointer, path_two), c2_value.set_value,-11.3,
			rate_func=linear,
			run_time=3
			)
		self.play(ShowCreation(li_path3))
		self.add(c3_tex)
		self.play(MoveAlongPath(pointer, path_one), c3_value.set_value,-2.4,
			rate_func=linear,
			run_time=3
			)
		self.wait()
		self.play(Indicate(paths))
		self.wait()
		#self.play(MoveAlongPath(pointer, path_three))
		#self.wait(2)

	def one(self,x):
		return x**2/16 + 1.5

	def three(self,x):
		return 6*np.sin(x/3) + 1.5

	def two(self,x):
		return 0.4705*x + 1.5