Dessinez des nœuds de manière interactive avec Plotly (Python)

Dessinez des nœuds de manière interactive avec Plotly (Python)

1.Tout d'abord

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.

Source (GitHub)

2. Révision

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 . Considérez la surface courbe fermée définie par la cartographie suivante comme un tore: $\mathbb{T}^2 : [-\pi , \pi]^2 \ni (\phi,\ \theta)\longmapsto \bigl(\cos \phi \ (3+\cos \theta),\ \sin \phi \ (3+\cos \theta),\ -\sin \theta \bigr)\in \mathbb{R}^3$$

torus.png

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), $ T(n,\ m) : [-\pi , \pi]\ni t \longmapsto \mathbb{T}^2(nt,\ mt) \in \mathbb{R}^3$

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) $. knot_on_torus.png

3. Mise en œuvre

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. knot_2_3.png

4. Enfin

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

Dessinez des nœuds de manière interactive avec Plotly (Python)
Dessiner un graphique avec python
Dessiner une forme d'onde mp3 en Python
Dessinez le disque de Poancare en Python
Dessiner "Dessiner une fougère par programme" en Python
Dessiner la fonction Yin en python
Dessinez un cœur en Python
Dessinez des ondes sinusoïdales avec Blender Python
Dessinez une matrice de diagramme de dispersion avec python
Dessinez un diagramme CNN en Python
Dessinez Nozomi Sasaki dans Excel avec python
Dessiner un cœur avec Python Partie 2 (SymPy Edition)
Dessinez une structure arborescente en Python 3 à l'aide de graphviz
Affichage du graphique en chandeliers en Python (édition Plotly)
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Dessiner un graphique d'une fonction quadratique en Python
Dessinez des graphiques dans Julia ... Laissez les graphiques à Python
[Python] Comment dessiner un histogramme avec Matplotlib
Liste triée en Python