first commit
This commit is contained in:
		
							
								
								
									
										16
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | .PHONY: all preview render opengl venv | ||||||
|  | all: preview | ||||||
|  |  | ||||||
|  | preview: main.py | ||||||
|  | 	manim render main.py -pqm  | ||||||
|  |  | ||||||
|  | render: main.py | ||||||
|  | 	manim render main.py -qh  | ||||||
|  |  | ||||||
|  | opengl: main.py | ||||||
|  | 	manim render main.py -p --renderer=opengl | ||||||
|  |  | ||||||
|  | venv: requirements.txt | ||||||
|  | 	python -m venv venv | ||||||
|  | 	source venv/bin/activate | ||||||
|  | 	pip install -r requirements | ||||||
							
								
								
									
										64
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,64 @@ | |||||||
|  | from manim import * | ||||||
|  | import math | ||||||
|  |  | ||||||
|  | def norm(vec): | ||||||
|  |     return math.sqrt(sum([xi ** 2 for xi in vec])) | ||||||
|  |  | ||||||
|  | def normalize(vec): | ||||||
|  |     n = norm(vec) | ||||||
|  |     return [xi / n for xi in vec] | ||||||
|  |  | ||||||
|  | def plus(v1, v2): | ||||||
|  |     return [x1 + x2 for x1, x2 in zip(v1, v2)] | ||||||
|  |  | ||||||
|  | def minus(v1, v2): | ||||||
|  |     return [x1 - x2 for x1, x2 in zip(v1, v2)] | ||||||
|  |  | ||||||
|  | def mult(v, c): | ||||||
|  |     return [xi * c for xi in v] | ||||||
|  |  | ||||||
|  | def SegmentedLine(points): | ||||||
|  |     assert(len(points) >= 2) | ||||||
|  |     ret = [] | ||||||
|  |     for p1, p2 in zip( points[:-1], points[1:] ): | ||||||
|  |         vec = minus(p2, p1) | ||||||
|  |         length = norm(vec) | ||||||
|  |         normalized = normalize(vec) | ||||||
|  |         rotated = [-normalized[1], normalized[0], 0] | ||||||
|  |  | ||||||
|  |         ret.append(p1) | ||||||
|  |         ret.append(plus(p1, mult(normalized, length * 1/3))) | ||||||
|  |         ret.append(plus(p1, plus(mult(normalized, length/2), mult(rotated, math.sqrt(3) * length / 6)))) | ||||||
|  |         ret.append(plus(p1, mult(normalized, length * 2/3))) | ||||||
|  |     ret.append(points[-1]) | ||||||
|  |     return ret | ||||||
|  |  | ||||||
|  | class snowflake(Scene): | ||||||
|  |     def construct(self): | ||||||
|  |  | ||||||
|  |         points = [[-7, -1, 0], | ||||||
|  |                   [ 7, -1, 0]] | ||||||
|  |  | ||||||
|  |         segment = VMobject(stroke_width=1) | ||||||
|  |         segment.set_points_as_corners(points) | ||||||
|  |  | ||||||
|  |         self.add(*[Dot(p) for p in points]) | ||||||
|  |  | ||||||
|  |         self.play(Create(segment)) | ||||||
|  |         self.wait(1) | ||||||
|  |  | ||||||
|  |         vg = VGroup() | ||||||
|  |         for i in range(3): | ||||||
|  |             points = SegmentedLine(points) | ||||||
|  |             vg.add(*[Dot(p) for p in points]) | ||||||
|  |             self.play(Create(vg)) | ||||||
|  |             self.play(segment.animate.set_points_as_corners(points)) | ||||||
|  |             self.wait(1) | ||||||
|  |  | ||||||
|  |         self.play(Uncreate(vg)) | ||||||
|  |         self.play(*[FadeOut(mob) for mob in self.mobjects]) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     sc = snowflake() | ||||||
|  |     sc.render(True) | ||||||
							
								
								
									
										8
									
								
								manim.cfg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								manim.cfg
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | |||||||
|  | [CLI] | ||||||
|  | frame_rate = 30 | ||||||
|  | pixel_height = 1080 | ||||||
|  | pixel_width = 1920 | ||||||
|  | background_color = BLACK | ||||||
|  | background_opacity = 1 | ||||||
|  | scene_names = snowflake | ||||||
|  |  | ||||||
							
								
								
									
										48
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | |||||||
|  | asttokens==3.0.0 | ||||||
|  | audioop-lts==0.2.1 | ||||||
|  | av==13.1.0 | ||||||
|  | beautifulsoup4==4.13.3 | ||||||
|  | click==8.1.8 | ||||||
|  | cloup==3.0.6 | ||||||
|  | dearpygui==2.0.0 | ||||||
|  | decorator==5.2.1 | ||||||
|  | executing==2.2.0 | ||||||
|  | glcontext==3.0.0 | ||||||
|  | ipython==9.0.1 | ||||||
|  | ipython_pygments_lexers==1.1.1 | ||||||
|  | isosurfaces==0.1.2 | ||||||
|  | jedi==0.19.2 | ||||||
|  | manim==0.19.0 | ||||||
|  | ManimPango==0.6.0 | ||||||
|  | mapbox_earcut==1.0.3 | ||||||
|  | markdown-it-py==3.0.0 | ||||||
|  | matplotlib-inline==0.1.7 | ||||||
|  | mdurl==0.1.2 | ||||||
|  | moderngl==5.12.0 | ||||||
|  | moderngl-window==3.1.1 | ||||||
|  | networkx==3.4.2 | ||||||
|  | numpy==2.2.3 | ||||||
|  | parso==0.8.4 | ||||||
|  | pexpect==4.9.0 | ||||||
|  | pillow==11.1.0 | ||||||
|  | prompt_toolkit==3.0.50 | ||||||
|  | ptyprocess==0.7.0 | ||||||
|  | pure_eval==0.2.3 | ||||||
|  | pycairo==1.27.0 | ||||||
|  | pydub==0.25.1 | ||||||
|  | pyglet==2.1.3 | ||||||
|  | pyglm==2.8.0 | ||||||
|  | Pygments==2.19.1 | ||||||
|  | rich==13.9.4 | ||||||
|  | scipy==1.15.2 | ||||||
|  | screeninfo==0.8.1 | ||||||
|  | skia-pathops==0.8.0.post2 | ||||||
|  | soupsieve==2.6 | ||||||
|  | srt==3.5.3 | ||||||
|  | stack-data==0.6.3 | ||||||
|  | svgelements==1.9.6 | ||||||
|  | tqdm==4.67.1 | ||||||
|  | traitlets==5.14.3 | ||||||
|  | typing_extensions==4.12.2 | ||||||
|  | watchdog==6.0.0 | ||||||
|  | wcwidth==0.2.13 | ||||||
		Reference in New Issue
	
	Block a user