🔬

切割莫比乌斯环(Möbius strip)

视频中展示了剪开莫比乌斯环(Möbius strip)的几种情况,虽有趣味,于直觉却不易理解。于是尝试用python可视化切割过程如下。

莫比乌斯环是一种只有一个连通边缘的平面,其参数方程可以表示为

,其中

Python(matplotlib)实现可视化:

import math

import numpy as np
from matplotlib import cm
import matplotlib.pyplot as plt


def mobi(us, vs):
    x = np.array([(1 + vs / 2 * np.cos(u / 2)) * np.cos(u) for u in us])
    y = np.array([(1 + vs / 2 * np.cos(u / 2)) * np.sin(u) for u in us])
    z = np.array([vs / 2 * np.sin(u / 2) for u in us])
    return x, y, z


def main():
    us = np.arange(0, math.pi * 2, math.pi / 500)
    vs = np.arange(-1, 1, 1 / 500)
    fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
    ax.plot_surface(*mobi(us, vs), cmap=cm.coolwarm)
    plt.show()
image
  1. 从中间切割得到一个反转两次的非莫比乌斯环
  2. ax.plot(*mobi(us, 0), c="r", label="divider")
    ax.legend()
    
    fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
    
    x, y, z = mobi(us, np.arange(-1, -1/2, 1 / 500))
    ax.plot_surface(x, y, z, cmap=cm.coolwarm)
    x, y, z = mobi(us, np.arange(1/2, 1, 1 / 500))
    ax.plot_surface(x, y, z, cmap=cm.coolwarm)
    ax.plot(*mobi(us, 0), c="r", label="divider")
    ax.set_zlim(-1, 1)
    ax.legend()
    
    plt.show()
image
image
  1. 从其他位置剪开,得到一个中间的莫比乌斯环和反转两次的非莫比乌斯环。它们相互交错。
		fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
    x, y, z = mobi(us, np.arange(-1, -1/3, 1 / 500))
    ax.plot_surface(x, y, z + 0.5)
    x, y, z = mobi(us, np.arange(-1/3, 1/3, 1 / 500))
    ax.plot_surface(x, y, z - 1)
    x, y, z = mobi(us, np.arange(1/3, 1, 1 / 500))
    ax.plot_surface(x, y, z + 0.5)

    x, y, z = mobi(us, 1/3)
    ax.plot(x, y, z + 0.5, c="r", label="divider")
    x, y, z = mobi(us, -1/3)
    ax.plot(x, y, z + 0.5, c="b", label="divider")
    ax.legend()
    plt.show()
image
image

从可视化可以推知,从任意位置开始,沿分割莫比乌斯环,分割线自然地延长到。命名这条分割线为包围形成一个新的莫比乌斯环。当退化为一个普通的圆。此时所包围的莫比乌斯环不存在。

此外,由于和原莫比乌斯环的边缘不相交,总可以和原边缘构成一个新的有两个边沿的平面(因此是非莫比乌斯环)。这个平面对值域内的取值总是存在。