Plotly (Python)로 대화식으로 매듭을 그립니다.
Plotly (Python)로 대화식으로 매듭을 그립니다.
1. 소개
이번에는 매듭(knot)을 Plotly로 3차원 공간상에 도시하고자 합니다. 학습의 보조가 되면 다행입니다.
↓와 같은 것이 가능합니다.
See the Pen dyoyxKW by Sota Misawa ( @mitawaut )
on CodePen .
2. 복습
매듭을 보여줄 때 필요한 최소한의 복습을 해 둡니다.
매듭(knot)이란 $S^3$ 에 구분 선형적으로 포함된 $S^1$ 를 가리킵니다. $S^3$ 는 $\mathbb{R}^3\cup\{\infty\}$ 로 간주했기 때문에, 포함된 $S^1$ 가 $\infty$ 를 포함하지 않으면 $\mathbb{ R}^3$ 에 포함된 $S^1$ 라고 생각할 수 있습니다.
매듭의 유명한 표현 방법으로서 2차원 토러스면 $\mathbb{T}^2$ 에 따른 매듭이라는 것이 생각됩니다. 토러스로서 다음의 사상이 정하는 폐곡면을 생각합니다:
$$\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$$
$\mathbb{T}^2$ 위의 닫힌 곡선에서 두 개의 정수 세트 $(n,\m)$ 를 사용하여 ( $\mathbb{T}^2$ 의 정의 영역을 적절히 확장합니다. ),
$$
T(n,\m) : [-\pi ,\pi]\ni t\longmapsto\mathbb{T}^2(nt,\mt)\in\mathbb{R}^3$$
로 표시되는 것을 생각합니다. 이것은 매듭으로 생각할 수 있습니다. 이와 관련하여 다음 정리가 알려져 있습니다.
정리. $\mathbb{T}^2$ 에 포함되는 임의의 명확하지 않은 매듭 $K$ 에 대해서, 서로 소의 정수의 쌍 $(n,\m)$ 가 존재해 $K$ 는 $T(n,\m)$와 같은 값이다.
이 정리에서, 매듭의 표현으로서 $T(n,\m)$ 를 나타내자고 하는 것입니다. 다음은 $T(2,\3)$ 의 그림을 보여줍니다.
3. 구현
여기에서 5분 요리의 시작입니다. ipywidgets를 사용하기 때문에 jupyter notebook 추천입니다.
ipython==7.12.0
numpy==1.18.1
plotly==4.4.1
ipywidgets에서 $n,\m$ 을 조작할 수 있도록 하는 것을 목표로 합니다. 먼저 필요한 것을 가져옵니다.
# 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)
다음에 $\mathbb{T}^2$ 와 $T(n,\m)$ 도 정의합니다. 이것도 위의 논의를 그대로 구현할 뿐입니다.
# 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)
다음에 plot하면 됩니다. 초기값을 $(m,\m) = (2,\3)$ 로 하고, 슬라이드 바의 범위는 $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)
다음과 같이 표시되어 슬라이드바를 만지면 동시에 매듭이 바뀌면 성공입니다.
4. 마지막으로
보이지 않는 사람이 있으면 ipython 주위의 버전을 확인합시다. 첫 번째 게시물이 몇 분 정도 좋았기 때문에 위험하다고 생각했기 때문에 복습이라는 여분의 섹션을 만들었습니다
Reference
이 문제에 관하여(Plotly (Python)로 대화식으로 매듭을 그립니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MitawaUT/items/3bf3b963023a2508cbc4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)