置頂

我的 VPython 教學文件 (HackMD 版本)

VPython 教學文件目錄 安裝及測試 基本語法 等速度直線運動 自由落下 終端速度 水平抛射 使用For迴圈計算水平抛射資料 斜向抛射 圓周運動 簡諧運動 單擺 木塊彈簧系統分離 重力及簡諧 行星運動 相疊木塊 雙重簡諧運動 一維彈性碰撞 ...

熱門文章

2018年7月23日 星期一

VPython進階教學:按鈕

作者:王一哲
日期:2018/7/23




由於我們之前做的動畫,都是在按在 F5 後自動開始執行,如果我們想要在動畫中新增按鈕,讓使用者可以自己控制動畫,應該要怎麼做呢?我們希望按鈕的功能有:

  1. Run:按下時開始執行動畫
  2. Reset:按下時還原成起始狀態
  3. Stop:按下時停止執行程式

我們使用最簡單的動畫〈等速度直線運動〉的程式碼來改寫,成果如下:

有按鈕的等速度直線運動畫面截圖

按下 Run 按鈕後

用滑桿改變速度,使木塊向左移動

按下 Reset 按鈕後

2018年7月15日 星期日

讀書心得: 誰說不能從武俠學物理?

讀書心得: 誰說不能從武俠學物理?

日期:2018/7/15

李開周(2018)。 誰說不能從武俠學物理? 。臺北市:時報文化。

本書的作者嘗試用物理原理分析武俠小說的內容,這完全對應到我的特質,我在大學主修物理,練過幾年國術,也讀過金庸、古龍兩位大師絕大多數的作品。但是當我在讀武俠小說時總是不斷地提醒自己,千萬不要試著用物理原理分析小說的內容,因為裡面有很多與物理原理不合之處,這麼認真分析會破壞閱讀體驗。金庸大師在《天龍八部》第三版的〈後記〉中也提到
《天龍》中的人物個性與武功本領,有很多誇張或事實上不可能的地方,如「六脈神劍」、「火焰刀」、「北冥神功」、無崖子傳功、童姥返老還童等等。讀讀者們想像一下現代派繪畫中超現實主義、像徵主義的畫風,例如一幅畫中一個女人有朝左朝右兩個頭之類,在藝術上,脫離現實的表現方式是容許的。

而本書的作者偏要認真地用物理原理分析武俠小說,替小說中種種不可思議的武功和橋段自圓其說,實在是令人佩服。


本書分為7章:
  1. 武俠世界的速度
  2. 武俠世界的力度
  3. 武俠世界的功和能
  4. 武俠世界的聲和光
  5. 電場、磁場、氣場
  6. 凌波微步與量子物理
  7. 小龍女的不老密訣

2018年7月14日 星期六

VPython進階教學:蛇擺 Pendulum Wave

作者:王一哲
日期:2018/7/14




最近看到建國中學曾靖夫老師的 VPython 講義〈Lecture 7 多物件控制(list) - 波動現象模擬〉,其中一項作業就是要學生做出蛇擺的動畫。蛇擺的英文為 pendulum wave,如果照字面翻譯應該譯為擺波,由一組數個的單擺構成的波,假設整組蛇擺的週期為 $T$,其中週期最長的單擺在這段時間內共擺動 $N$ 次,則週期次長的單擺擺動 $N-1$ 次,依此類推。我們之前已經做過〈單擺〉的動畫,可以以此為基礎改造一下程式碼,應該很容易就能做出蛇擺的動畫。關於蛇擺的物理原理介紹請參考中央大學科學教育中心的網頁:〈蛇擺〉、〈大型蛇擺〉。

這是我用 VPython 在 Glowscript 網站製作的動畫,連結為 https://www.glowscript.org/#/user/yizhe/folder/Public/program/PendulumWave。


這個程式是進階教材,我們要善用類別 (class)的特性,使程式在使用上更加方便。程式的目標:

  1. 輸入蛇擺的週期、週期最長的單擺在蛇擺的一個週期內擺動的次數、單擺個數,自動計算所有單擺的週期及擺長。
  2. 建立一個類別 (class),輸入單擺的週期、懸掛位置,自動產生擺錘、繩子,掛於指定的位置,將擺錘放置於最大擺角。計算單擺對應的轉動慣量,設定起始的角速度、角加速度為0。
  3. 在類別中建立一個方法 (mehtod),輸入經過的時間,計算擺錘所受力矩、角加速度、角速度,更新擺錘的位置及繩子的方向。



2018年6月18日 星期一

Android 手機上的 Python IDE: Pydroid 3

Android 手機上的 Python IDE: Pydroid 3

日期:2018/6/18


今天在 Google Play 上找到一個好玩的東西,名為 Pydroid 3 的 Python IDE,看起來評價不錯,就下載來試試看,以下是下載連結:https://play.google.com/store/apps/details?id=ru.iiec.pydroid3&hl=zh_TW




2018年6月13日 星期三

使用 matplotlib 繪製函數及數據圖

使用 matplotlib 繪製函數及數據圖


日期:2018/6/13

繪製函數圖


我之前曾經用 Gnuplot 畫函數圖形,但自從學了 Python 以及 matplotlib 之後,就想要用 Python 來畫圖,下圖是 -4π ≤ x ≤ +4π 範圍內對應的 sin(x) 圖形,下方則是程式碼。



"""
 Python筆記: 2D曲線圖
 日期: 2018/6/13
 作者: 王一哲
"""
import numpy as np                                        # 引入科學計算函式庫
import matplotlib.pyplot as plt                           # 引入繪圖函式庫

xmin, xmax, num = -4*np.pi, 4*np.pi, 1000                 # 設定繪圖範圍、取點數
x = np.linspace(xmin, xmax, num)                          # 產生x
y = np.sin(x)                                             # 產生y

plt.figure(figsize = (8, 6), dpi = 100)                   # 設定圖片尺寸
plt.xlabel('x(rad)', fontsize = 16)                       # 設定坐標軸標籤
plt.ylabel('sin(x)', fontsize = 16)
plt.xticks(fontsize = 12)                                 # 設定坐標軸數字格式
plt.yticks(fontsize = 12)
plt.grid(color = 'red', linestyle = '--', linewidth = 1)  # 設定格線顏色、種類、寬度
plt.plot(x, y, color = 'blue', linewidth = 3)             # 繪圖並設定線條顏色、寬度
plt.savefig('plot_2D.svg')                                # 儲存圖片
plt.savefig('plot_2D.png')
plt.show()                                                # 顯示圖片


2018年6月5日 星期二

使用 with 開啟檔案並寫入內容

使用 with 開啟檔案並寫入內容
日期:2018/6/6



我在之前的 VPython 文章〈使用for迴圈計算水平抛射資料〉以及〈水平抛射〉當中,將程式產生的資料轉成字串存到文字檔中,但是當時使用的寫法很有可能會因為最後沒有關閉檔案而發生問題,之前的寫法如下:

file = open("data.txt", "w", encoding = "UTF-8")
file.write("h(m), t(s), R(m)\n")

for h in range(5, 51, 1):
......
    file.write(str(h) + "," + str(t) + "," + str(ball.pos.x + L/2) + "\n")

file.close() 



在 Python 裡有一個小技巧,使用 with 開啟檔案,就可以避免忘記關閉檔案造成的問題,寫法如下:

with open("data.txt", "w", encoding = "UTF-8") as file:
    file.write("h(m), t(s), R(m)\n")

for h in range(5, 51, 1):
......
    with open("data.txt", "a", encoding = "UTF-8") as file:
        file.write(str(h) + "," + str(t) + "," + str(ball.pos.x + L/2) + "\n")



順帶一提,昨天花了一點時間測式高亮度語法的外掛程式,我採用的外掛是 Prism ( https://prismjs.com/index.html ),詳細的作法是參考這篇文章完成的:〈[技術分享] 寫給會在部落格中撰寫程式碼的你 ─ 在網頁中嵌入高亮程式碼上色 (syntax highlighting)〉。我昨天在 Ubuntu 上用 Google Chrome 編輯版面設置,但是沒辦法顯示高亮度語法;今天改用 Windows 再按照相同的步驟編輯就成功了,原因不明。

2018年5月14日 星期一

電流的磁效應

作者:王一哲
日期:2018/5/14




選修物理下第8章電流的磁效應會介紹必歐 - 沙伐定律 (Biot–Savart law),用來計算一小段載流導線於空間中某處產生的磁場,方程式為

$$ d \vec B = \frac{\mu_0}{4\pi} \frac{I d \vec L \times \hat r}{r^2} ~\Rightarrow~ dB = \frac{\mu_0}{4\pi} \frac{I dL \sin \theta}{r^2} $$

利用必歐 - 沙伐定律可以算出長直載流導線垂直距離 r 處的磁場量值為

$$ B = \frac{\mu_0 I}{2 \pi r} $$

半徑為 r 的載流線圈圓心處的磁場量值為

$$ B = \frac{\mu_0 I}{2 r} $$

單位長度中有 n 匝線圈的的載流螺線管中心處的磁場量值為

$$ B = \mu_0 nI $$

磁場應該是分布在空間中的,但是書上的圖卻都是平面的,因此我想要藉由 VPython 將空間中的磁場強度、方向畫出來,成果如下圖。


載流螺線管產生的磁場示意圖



2018年5月13日 星期日

拉塞福散射

作者:王一哲
日期:2018/5/13




拉塞福散射 (Rutherford scattering) 實驗是找到原子核存在的重要證據。將 α 粒子(氦原子核)射向金箔,α 粒子與金原子核之間的靜電力為排斥力,若忽略重力的作用,由於金原子核固定不動,α 粒子所受靜電力通過金原子核,相對於金原子核的角動量守恆。α 粒子與金原子核之間只有靜電力作功,系統力學能守恆。

下圖為拉塞福散射實驗示意圖,當 α 粒子於無窮遠處時速度向右,金原子核與速度方向之間的垂直距離稱為碰撞參數,通常代號為 b。這次的程式目標是改變 b,畫出 α 粒子動能、系統電位能、力學能與時間的關係圖,找出 α 粒子向上偏移的量值。


拉塞福散射實驗示意圖


質譜儀

作者:王一哲
日期:2018/5/13




有5種粒子以相同之速度垂直進入均勻磁場B,其軌跡如下圖所示。設此5種粒子為:碳原子(12C)、氧離子(16O2-)、鈉離子(23Na+)、鎂離子(24Mg2+)及氯離子(35Cl-)。若不考慮重力因素,則圖中1、2、3、4及5之示意軌跡分別代表何者?


粒子在質譜儀中運動軌跡示意圖



這是84年日大聯招的題目,雖然年代已經很久遠,但在坊間各家的參考書中仍然可以找到這個題目。當粒子向上進入磁場時,帶正電粒子所受的磁力向左,帶負電粒子所受的磁力向右,電中性的粒子沒有受到磁力。若以磁力當作向心力,在磁場中做等速率圓周運動,則

$$ qvB = m \cdot \frac{v^2}{R} ~\Rightarrow~ R = \frac{mv}{qB} \propto \frac{m}{q} $$

因此本題的答案為23Na+、24Mg2+、12C、16O2-、35Cl-。這次我們要試著用 VPython 將粒子在質譜儀中的運動過程畫出來。