
这段代码使用 Manim 数学动画库创建了一个名为“哥特玫瑰裙”的三维参数曲面可视化。其核心是通过包含正弦和余弦函数的参数方程生成大量空间点云,这些点的分布规律模拟了带有复杂褶皱纹理的裙摆形状。代码设置了环绕相机旋转和整体缩放动画,让观众能从各个角度观察曲面的细节,同时在屏幕角落固定显示数学公式,将抽象的数学表达式与直观的视觉图形结合在一起,体现了数学的艺术美感。
来看代码:
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
| from manim import * import numpy as np
class GothicRoseSkirt(ThreeDScene):
def construct(self):
self.set_camera_orientation(phi=75 * DEGREES, theta=-90 * DEGREES, distance=10)
formula = MathTex( r"\begin{cases}", r"x = \sin u \cdot (15\sin v - 4\sin 3v) \\", r"y = 8\cos u \\", r"z = \sin u \cdot (15\cos v - 5\cos 2v - 2\cos 3v - \cos v)", r"\end{cases}", font_size=28, color=YELLOW ).to_corner(UL).set_opacity(0.8) self.add_fixed_in_frame_mobjects(formula)
def parametric_surface(u, v, scale_factor): x = np.sin(u) * (15 * np.sin(v) - 4 * np.sin(3 * v)) y = 8 * np.cos(u) z = np.sin(u) * (15 * np.cos(v) - 5 * np.cos(2 * v) - 2 * np.cos(3 * v) - np.cos(v)) return np.array([x * scale_factor, y * scale_factor, z * scale_factor]) points = VGroup() u_samples = 40 v_samples = 80 scale_factor = 0.14 color = RED for i in range(u_samples): u = (i / u_samples) * PI for j in range(v_samples): v = (j / v_samples) * 2 * PI position = parametric_surface(u, v, scale_factor) radius = 0.03 dot = Dot(position, radius=radius, color=color) points.add(dot) self.add(points) self.begin_ambient_camera_rotation(rate=0.5) original_positions = [dot.get_center() for dot in points] for i in range(4): self.play(points.animate.scale(1.2), run_time=3.14, rate_func=there_and_back) if i < 3: for dot, orig_pos in zip(points, original_positions): dot.move_to(orig_pos) self.stop_ambient_camera_rotation()
|
来看代码演示的效果,3D类的视频,一般都是时间段体积大,涉及网络加载的原因,估计会影响到播放效果:
涉及到的参数方程
1 2 3
| x = sin(u) * (15sin(v) - 4sin(3v)) y = 8cos(u) z = sin(u) * (15cos(v) - 5cos(2v) - 2cos(3v) - cos(v))
|
好了,今天的教程就到这里,感谢大家来到老刘博客。