Dieses Mal werde ich den Knoten mit Plotly in einem dreidimensionalen Raum zeichnen. Ich hoffe, es wird Ihnen beim Lernen helfen.
Sie können so etwas wie ↓ tun.
See the Pen dyoyxKW by Sota Misawa (@mitawaut) on CodePen.
Ich werde die minimal notwendige Überprüfung durchführen, um den Knoten zu veranschaulichen.
** Knoten ** (Knoten) bezieht sich auf $ S ^ 1 $, das linear in $ S ^ 3 $ eingebettet ist. Da $ S ^ 3 $ als $ \ mathbb {R} ^ 3 \ cup \ {\ infty \} $ angesehen werden kann, wenn $ S ^ 1 $ $ \ infty $ nicht enthält, dann $ \ Sie können sich das als $ S ^ 1 $ vorstellen, eingebettet in mathbb {R} ^ 3 $.
Eine bekannte Methode zum Ausdrücken von Knoten ist ein Knoten entlang der zweidimensionalen Torusoberfläche $ \ mathbb {T} ^ 2
Verwenden eines Paares von zwei ganzen Zahlen $ (n, \ m) $ auf einer geschlossenen Kurve in $ \ mathbb {T} ^ 2 $ (Erweiterung der Definition von $ \ mathbb {T} ^ 2 $ entsprechend),
Überlegen Sie, was als dargestellt wird. Sie können sich das als Knoten vorstellen. Der folgende Satz ist in dieser Hinsicht bekannt.
** Satz. ** Für jeden nicht trivialen Knoten $ K $, der in $ \ mathbb {T} ^ 2 $ enthalten ist, existiert ein Paar von Primzahlen $ (n, \ m) $ für $ K. $ Entspricht $ T (n, \ m) $.
Aus diesem Theorem versuchen wir, $ T (n, \ m) $ als Knotenausdruck darzustellen. Unten ist ein Diagramm von $ T (2, \ 3) $.
Dies ist der Beginn des Kochens für 5 Minuten. Da ipywidgets verwendet wird, wird ein Jupyter-Notebook empfohlen.
requirements.txt[Auszug]
ipython==7.12.0
numpy==1.18.1
plotly==4.4.1
Das Ziel ist es, $ n, \ m $ mit ipywidgets manipulieren zu können. Importieren Sie zunächst das, was Sie benötigen.
# 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)
Definieren Sie dann $ \ mathbb {T} ^ 2 $ und $ T (n, \ m) $. Dies implementiert wiederum nur die obige Diskussion so wie sie ist.
# 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)
Alles was Sie tun müssen, ist Handlung. Der Anfangswert ist $ (m, \ m) = (2, \ 3) $, und der Bereich der Schiebeleiste ist $ 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)
Wenn Folgendes angezeigt wird und sich der Knoten gleichzeitig mit dem Spielen mit dem Schieberegler ändert, sind Sie erfolgreich.
Wenn Sie es nicht sehen, überprüfen Sie die Version um ipython. ~~ Ich fand es unangenehm, dass der erste Beitrag von ein paar Minuten Qualität war, also habe ich einen zusätzlichen Abschnitt namens review ~~ erstellt
Recommended Posts