Cette fois, je tracerai le nœud dans un espace tridimensionnel avec Plotly. J'espère que cela vous aidera dans votre apprentissage.
Vous pouvez faire quelque chose comme ↓.
See the Pen dyoyxKW by Sota Misawa (@mitawaut) on CodePen.
Je ferai le minimum d'examen nécessaire pour illustrer le nœud.
** Noeud ** (noeud) fait référence à $ S ^ 1 $ intégré linéairement dans $ S ^ 3 $. Puisque $ S ^ 3 $ peut être considéré comme $ \ mathbb {R} ^ 3 \ cup \ {\ infty \} $, si le $ S intégré ^ 1 $ n'inclut pas $ \ infty $, alors $ \ Vous pouvez le considérer comme $ S ^ 1 $ intégré dans mathbb {R} ^ 3 $.
Une méthode bien connue pour exprimer les nœuds est un nœud le long de la surface tore bidimensionnelle $ \ mathbb {T} ^ 2
En utilisant une paire de deux entiers $ (n, \ m) $ sur une courbe fermée sur $ \ mathbb {T} ^ 2 $ (étendant la portée de $ \ mathbb {T} ^ 2 $ de manière appropriée),
Considérez ce qui est représenté par. Vous pouvez considérer cela comme un nœud. Le théorème suivant est connu à cet égard.
** Théorème. ** Pour tout nœud non trivial $ K $ contenu dans $ \ mathbb {T} ^ 2 $, il existe une paire d'entiers premiers $ (n, \ m) $ pour $ K $ Est équivalent à $ T (n, \ m) $.
A partir de ce théorème, nous essayons d'illustrer $ T (n, \ m) $ comme une expression de nœud. Voici un diagramme de $ T (2, \ 3) $.
C'est le début de la cuisson pendant 5 minutes. Puisque ipywidgets est utilisé, jupyter notebook est recommandé.
requirements.txt[Extrait]
ipython==7.12.0
numpy==1.18.1
plotly==4.4.1
Le but est de pouvoir manipuler $ n, \ m $ avec ipywidgets. Tout d'abord, importez ce dont vous avez besoin.
# import modules
import plotly.offline as offline
import plotly.graph_objs as go
import numpy as np
from ipywidgets import interactive, VBox, widgets
from IPython.display import display
offline.init_notebook_mode(connected=True)
Définissez ensuite $ \ mathbb {T} ^ 2 $ et $ T (n, \ m) $. Encore une fois, cela implémente simplement la discussion ci-dessus telle quelle.
# functions
def torus(p, t):
x = np.cos(p) * (3 + np.cos(t))
y = np.sin(p) * (3 + np.cos(t))
z = -np.sin(t)
return (x, y, z)
def knot(n, m):
theta = np.linspace(-np.pi, np.pi, 1000)
p, t = n*theta, m*theta
return torus(p, t)
Tout ce que vous avez à faire est de tracer. La valeur initiale est $ (m, \ m) = (2, \ 3) $ et la plage de la barre de défilement est $ n $: -10 ~ 10, $ m $: 0 ~ 10.
fig = go.FigureWidget()
scatt = fig.add_scatter3d()
def update(n=2, m=3):
with fig.batch_update():
(cx, cy, cz) = knot(n, m)
scatt.data[0].x=cx
scatt.data[0].y=cy
scatt.data[0].z=cz
scatt.data[0].mode='lines'
scatt.data[0].line=dict(
width=10,
color='green')
vb = VBox((fig, interactive(update, n=(-10, 11, 1), m=(0, 10, 1))))
display(vb)
Si ce qui suit s'affiche et que le nœud change en même temps que vous jouez avec la barre de défilement, vous réussissez.
Si vous ne le voyez pas, vérifiez la version autour d'ipython. ~~ J'ai trouvé gênant que le premier message soit de quelques minutes, j'ai donc créé une section supplémentaire appelée revue ~~
Recommended Posts