用Manim制作简单的莫比乌斯环

莫比乌斯环是一种拓扑学结构,它只有一个面和一个边界,可以用一根纸条扭转成180度后,两头再粘接起来,就形成了莫比乌斯环,它是将正反面统一为一个面。

如果沿着莫比乌斯环的中间剪开,将会形成一个比原来的莫比乌斯环空间大一倍的环,如果再沿着这个环的中间剪开,将会形成两个一样的,并具有正反两个面的环,而且这两个环是相互套在一起的。

莫比乌斯环沿着中线剪开,第一次,可以得到一个更大的环;第二次及以后,每次都会得到两个互相嵌套的环,中间永远不会断开,这也是莫比乌斯环的神奇之处。

平常的应用也很多,如游乐园的过山车;莫比乌斯环也是一种死循环方式,不管你从莫比乌斯环的哪个点出发,走了一会后你会发现又回到了原点,所以说莫比乌斯环也是很恐怖的,永远的往返,无限,原地踏步。

下面我们来看效果代码:

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
from manim import *
import numpy as np

class MobiusRingFixed(ThreeDScene):
def construct(self):
# 设置相机视角
self.set_camera_orientation(phi=60*DEGREES, theta=30*DEGREES)

axes = ThreeDAxes()

# 创建莫比乌斯环的网格点
u_values = np.linspace(0, 2*PI, 40)
v_values = np.linspace(-0.5, 0.5, 15)

# 创建莫比乌斯环的网格
mobius_mesh = VGroup()

# 创建经线(u方向)
for v in v_values:
points = []
for u in u_values:
r = 2 + v * np.cos(u/2)
x = r * np.cos(u)
y = r * np.sin(u)
z = v * np.sin(u/2)
points.append([x, y, z])

# 创建曲线
curve = VMobject()
curve.set_points_smoothly(points)
curve.set_color(interpolate_color(BLUE, PURPLE, (v + 0.5)))
curve.set_stroke(width=2)
mobius_mesh.add(curve)

# 创建纬线(v方向)
for u in u_values[::4]: # 每隔4个点取一个
points = []
for v in v_values:
r = 2 + v * np.cos(u/2)
x = r * np.cos(u)
y = r * np.sin(u)
z = v * np.sin(u/2)
points.append([x, y, z])

# 创建曲线
curve = VMobject()
curve.set_points_smoothly(points)
curve.set_color(WHITE).set_stroke(width=1, opacity=0.5)
mobius_mesh.add(curve)

# 添加到场景
self.add(axes, mobius_mesh)

# 旋转动画
self.begin_ambient_camera_rotation(rate=0.2)
self.wait(6)

# 添加标签
label = Text("莫比乌斯环", font_size=48, color=YELLOW)
label.to_edge(DOWN)
self.add_fixed_in_frame_mobjects(label)
self.play(Write(label))

self.wait(4)
self.stop_ambient_camera_rotation()

2020迪拜世博会卢森堡馆由Metaform Architects事务所设计,建筑师希望通过建筑真实地展现出卢森堡的过去、现在和未来,同时也彰显出这个国家的价值 ,面积虽小但雄心勃勃,有趣但令人安心,最重要的是始终保有慷慨和开放的态度。因此,还有什么能比莫比乌斯环更能激发出设计灵感的呢?这个单面的环形既没有起点也没有终点,象征着无限,更象征了卢森堡循环经济与多元文化的统一整体。