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