最近アニメーションを表示出来るようになった。
折角なので、何かをお絵かきしたい。
その前に、球面に虫がいる場面を考える。
- 球面上の点は、θとφの2つの変数で管理することが出来る。
- θ方向に一定の速度で動かしつつ、φ方向に一定の速度で動かすことを考える。
- 球面上を動かす芋虫が、同じ点に戻ってくるとは、どういうことか。
- 球面は、北極に行くと、経度が0でも180でも、何でも良くなる。
- 全ての経線が交叉するから。
- 北極点と南極点
- 所々円筒っぽく!
- 0~πで、両端は分離している。
- ここがトーラスと違う。
- トーラスっぽくするなら、θの値をπで割った余りとすることで出来る。
- これは、トーラス上の運動の、球面表示となる。
- 形を別の形として解釈する
- 構造を保っていれば準同型。
お絵かきする。
球面を動くには、緯度と経度の変化率さえ指定すれば、後は勝手に動いてくれる。
#%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython.display import HTML
import numpy as np
theta = np.linspace(-2* np.pi, 3 * np.pi, 140)
phi = np.linspace(-5* np.pi, 2*np.pi,140)
x = 4 * np.cos(theta) * np.cos(phi)
y = 4 * np.cos(theta) * np.sin(phi)
z = 4 * np.sin(theta)
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
a = 3.95 * np.outer(np.cos(u), np.sin(v))
b = 3.95 * np.outer(np.sin(u), np.sin(v))
c = 3.95 * np.outer(np.ones(np.size(u)), np.cos(v))
# Attaching 3D axis to the figure
fig = plt.figure(figsize=(6,6))
ax = fig.add_subplot(111, projection='3d')
p1, = ax.plot(, , ,'o',markersize = 10,color='C3')
p2, = ax.plot(, , ,'o',markersize = 9,color='C3')
p3, = ax.plot(, , ,'o',markersize = 8,color='C3')
p4, = ax.plot(, , ,'o',markersize = 7,color='C3')
p5, = ax.plot(, , ,'o',color='C3')
p6, = ax.plot(, , ,'o',color='C3')
p7, = ax.plot(, , [],'o',color='C3')
ax.set(xlim=(-5,5),ylim=(-5,5),zlim=(-5,5))
# Plot the surface
def init():
return p1,p2,p3,p4,p5
def update(i):
p1.set_data*1
p1.set_3d_properties(z[i+6])
p1.set_alpha(1)
p2.set_data*2
p2.set_3d_properties(z[i+5])
p2.set_alpha(6/7)
p3.set_data*3
p3.set_3d_properties(z[i+4])
p3.set_alpha(5/7)
p4.set_data*4
p4.set_3d_properties(z[i+3])
p4.set_alpha(4/7)
p5.set_data*5
p5.set_3d_properties(z[i+2])
p5.set_alpha(3/7)
p6.set_data*6
p6.set_3d_properties(z[i+1])
p6.set_alpha(2/7)
p7.set_data*7
p7.set_3d_properties(z[i])
p7.set_alpha(1/7)
return p1,p2,p3,p4,p5,p6,p7
ani = animation.FuncAnimation(fig, update, 96,interval=100)
plt.show()