''' Frenet Formulas (Helix) 動畫繪圖 by Ching-Shoei Chiang Observation(a>0): (1) b>0 (2) b<0 (3) b->infinity Exercise: Fix a, find b, so that the torsion has maximum value. You may use mathematical evaluation to find b, and compare to what you observe (or design) in this program. ''' from visual import * import math #設定a, b, c值 a=6 b=0.2 c=math.sqrt(a*a+b*b) ss = c * 2 * pi step = 0.1 # if showcurve == True,會先將曲線繪出後再執行 showcurve = False #先設定三軸以及Tangent, Normal, xaxis = arrow(pos=(0,0,0), axis=(a,0,0), shaftwidth=0.005, color=color.red) yaxis = arrow(pos=(0,0,0), axis=(0,a,0), shaftwidth=0.005, color=color.green) zaxis = arrow(pos=(0,0,0), axis=(0,0,a), shaftwidth=0.005, color=color.blue) tv = arrow(pos=(0,0,0), axis=(a,0,0), shaftwidth=0.05, color=color.red) nv = arrow(pos=(0,0,0), axis=(0,a,0), shaftwidth=0.05, color=color.green) bv = arrow(pos=(0,0,0), axis=(0,0,a), shaftwidth=0.05, color=color.blue) #設定在曲線上跑動的點(球) ball = sphere(pos=(0,0,0), radius=0.2, color=color.blue) trail = curve() trail.append((0,0,0)) if showcurve: s=arange(0,ss,step) curve(x=a*cos(s/c), y=a*sin(s/c), z=b*s/c, color=color.white) # 將曲線的torvature和torsion值印出 print("The constant curvature = ", a/c**2, "\nThe constant torsion = ", b/c**2) #動畫開始 for s in arange(0,ss, step): rate(10) ball.pos = (a*cos(s/c), a*sin(s/c), b*s/c) trail.append(ball.pos) tv.pos = nv.pos = bv.pos = ball.pos tv.axis = ((-a/c)*sin(s/c), (a/c)*cos(s/c), b/c) nv.axis = (-cos(s/c), -sin(s/c), 0) bv.axis = ((b/c)*sin(s/c), (-b/c)*cos(s/c), a/c)