"""
用 VPython 來做 3D 動畫。
複合圓周運動
ζ= 0
for k in range(N+1):
ζ += exp(1j*2*π*f*t*k)
除了漢字之外,
順便把希臘字母
π (pi),
ζ (zeta),
Γ (Gamma),
Φ (Phi)
也拿來用一用。
Renyuan Lyu
2014/07/03
"""
import pylab as pl
import visual as vs
def 設定背景():
背景色= (.5,.5,.5) # 灰色
vs.scene.background= 背景色
三軸向量= [(1,0,0), (0,1,0), (0,0,1)]
三軸向量= [vs.vector(a) for a in 三軸向量]
for a in 三軸向量:
vs.arrow(axis= a, color= a, shaftwidth= 0.01)
info= '''ζ = Σ exp(j 2 π f t k), k in [1,Ν]'''
vs.text(text= info, align='center',
pos= (0,2,2),
height= .2,
width= .2,
depth= 0.1,
color= (1,1,0))
def 實驗01():
頻率= f = 1
最大時間= T = 2
圓周率= π = pl.pi # 3.1415926
dt= 0.01
複指數= exp= pl.exp
實部= real= pl.real
虛部= imag= pl.imag
時間範圍= pl.arange
#
# 畫 曲線 Γ (Gamma)
#
t= 時間範圍(0, T, dt)
N= 2
ζ= 0
for k in range(1,N+1):
ζ += exp(1j*2*π*f*t*k)
x= real(ζ)
y= imag(ζ)
z= t
曲線= Γ= vs.curve()
Γ.x= x
Γ.y= y
Γ.z= z
Γ.red= x
Γ.green= y
Γ.blue= z
#
# 球 Φ (Phi) 沿曲線 Γ 轉
#
球= Φ= vs.sphere(pos= (0,0,0), radius= .1, color=(1,1,1))
t= 0
while True:
ζ= 0
for k in range(1, N+1):
ζ += exp(1j*2*π*f*t*k)
x= real(ζ)
y= imag(ζ)
z= t
Φ.pos= (x,y,z)
Φ.color= (x,y,z)
Φ.visible= True
vs.rate(100)
Φ.visible= False
t += dt
if ( (T-abs(dt) < t < T)
or (0 < t < abs(dt))
):
dt *= -1
Φ.visible= True
if __name__=='__main__':
設定背景()
實驗01()
I Love Python. I Learn Python. I Teach Python. I Am a Python.
2014/07/04
用 VPython 來做 3D 動畫。
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言