## 初探Vpython-等速直線運動 #### by Switch --- ## 介紹 ---- Vpython是Python的視覺化套件, 經常被拿來寫物理情境的模擬。 P.S. 台大有一門課就在教你這個 ---- 一般而言結構會長這樣 數值定義 \\(\to\\) 建立物體 \\(\to\\) 帶入物理邏輯 ---- Vpython也可以下載套件,在線下編輯 ``` pip install vpython ``` 本次教學使用線上工具 ### Glowscript ![](https://hackmd.io/_uploads/B1HaGnyun.jpg =25%x) --- ## 事前準備 ---- 搜尋[Glowscript](https://www.glowscript.org),進入頁面後點選Sign in ![](https://hackmd.io/_uploads/HJm8m3yOh.jpg) ---- 登入後,點擊自己的帳號 ![](https://hackmd.io/_uploads/BydlEnJ_3.jpg) ---- 最後就可以Creat a program,開始打code了 ![](https://hackmd.io/_uploads/S1wtN2Jdn.jpg) ---- 如果你不喜歡如此陽春的介面,還有另一個也不錯用的網站,請見最後面補充 --- ## 基礎語法 ---- ### 各種物件 ```Vpython item1 = box(pos, size, color) #方塊 item2 = sphere(pos, radius, color) #球體 item3 = helix(pos, radius, thickness, color) #螺旋體(模擬彈簧) item4 = arrow(pos, axis, shaftwidth, color) #箭頭 item5 = cylinder(pos, axis, radius, color) #線 ``` 今天只會用到 item1,也就是 ``` BOX = box(pos, size, velocity, acceleration, color) ``` 註:velocity 和 acceleration 視模擬情境而加 ---- ### 環境建立 ```vpython scene=canvas(title, width, height, x=0, y=0, center, color) #背景 floor = box(pos, size, color) #地板習慣用大箱子 ``` ---- ### 空間的定義 在Vpython裡,我們會這麼定義x、y、z軸 ![](https://hackmd.io/_uploads/S1vnU-7w3.jpg =40%x) ---- ### 座標的定義 給立方體一個座標,此座標為立方體的中心點 ![](https://hackmd.io/_uploads/H1YT8W7v2.jpg) 上圖為座標給定為\\((0,0,0)\\)時,方塊的位置 --- ### 那就來實作吧 ---- #### 本次實作內容:等速直線運動 ---- 第一步要先定義一些要用的數字 ```vpython from vpython import * s = 2 #方塊大小 L = 40 #地板長度 dt = 0.001 #時間間隔 t = 0 #時間 ``` ---- 接著照前述方式建立好一個環境 ```vpython scene=canvas(title="等速直線運動", width=600,height=600, x=0, y=0, center=vec(0,10,-5), background=vec(0.3,0,0.7)) floor = box(pos=vec(0,0,0), size=vec(L,0.1,10), color=color.cyan) ``` ---- 然後我們需要一個運動的物體 (此處以方塊作為示範) ```vpython block=box(pos=vec(-L*0.5, floor.pos.y+((floor.size.y)/2)+(s/2), 0),size=vec(s,s,s),v=vec(2,0,0),color=color.red) ``` ---- 最後就是物理模擬部分,由於只能是“模擬”, 因此無法真的做到百分百還原現實狀況。 但是我們還是能盡量仿真 ---- 我們是這樣處理的: 把時間間隔壓到很小,並且時時刻刻更新數值 ---- 具體實作 ``` while(block.pos.x + s/2 < floor.pos.x + L/2): #走到地板的邊邊為止 rate(1000) #每秒做1000次 block.pos += block.v * dt #在dt秒內,方塊會移動v×dt單位長度 t += dt ``` --- [成果演示](https://trinket.io/glowscript/e38d2b3b26?outputOnly=true) --- ## 補充 ---- 你也可以使用另一個編輯軟體 ### Trinket ![](https://i.imgur.com/e6NQHN2.png) ---- ## 事前準備 ---- 搜尋[Trinket](https://trinket.io/),進入頁面後選取註冊或登入 ![](https://i.imgur.com/kAsaKIi.png) ---- 登入後,點New trinket \\(\to\\) GlowScript ![](https://i.imgur.com/YJKsRgj.png) (記得進去後要選Pythonㄛ) --- # 謝謝大家
{"metaMigratedAt":"2023-06-18T07:10:57.408Z","metaMigratedFrom":"YAML","breaks":true,"contributors":"[{\"id\":\"084e105f-92be-4605-b399-8d3c0ef40c64\",\"add\":3437,\"del\":885}]","title":"Vpython-等速直線運動"}
    192 views