置頂

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

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

熱門文章

顯示具有 GeoGebra 標籤的文章。 顯示所有文章
顯示具有 GeoGebra 標籤的文章。 顯示所有文章

2022年5月15日 星期日

GeoGebra 教學 15:使用輸入欄位改變三角形邊長

作者:王一哲
日期:2022/5/16


本次課程檔案已上傳至 GeoGebraTube,可以線上操作或下載檔案。

目標


在繪圖區上新增三個輸入方格,由輸入方格改變三角形ABC的邊長;再新增一個控制三角形旋轉角度的數值滑桿;最後將三個內角的角度顯示於畫面上。
使用輸入方格改變三角形邊長


繪製三角形


1. 以邊長為3、4、5的直角三角形為例,首先於指令列中依序輸入以下指令定義邊長a、b、c及頂點A、B。
a = 3
b = 4
c = 5
A = Point({0, 0})
B = Point({c, 0})
2. 利用餘弦定理計算頂點C需要繞著頂點B逆時鐘方向旋轉的角度。
θ = 180° - acosd((a**2 + c**2 - b**2)/(2*a*c))
3. 定義頂點C的位置。
C = Rotate(Point({c+a, 0}), θ, B)
4. 繪製三角形ABC。
ABC = Polygon(A, B, C)
5. 標示頂點A、B、C分別對應的內角。
α = Angle(B, A, C)
β = Angle(C, B, A)
γ = Angle(A, C, B)

邊長為3、4、5的直角三角形


2022年5月10日 星期二

GeoGebra 教學 14:使用按鈕及核取方塊控制動畫

作者:王一哲
日期:2021/5/9


本次課程檔案已上傳至 GeoGebraTube,可以線上操作或下載檔案。

目標


我們之前都是在數值滑桿上按滑鼠右鍵,再點選快速選單中的開始動畫,但是這樣似乎有點麻煩。比較直覺的操作方式,應該是有一個按鈕,點一下開始動畫,再點一下暫停動畫;另一個按鈕則是重置動畫,點一下將時間歸零;或是有一個核取方塊,打勾開始動畫,取消打勾停止動畫。下圖是以水平拋射為例,使用按鈕及核取方塊控制動畫。
使用按鈕及核取方塊控制動畫


基本的水平拋射動畫


1. 於指令列中依序輸入以下指令定義數值
H = 10
g = 9.8
v_0 = 10
tmax = sqrt(2*H/g)
2. 於指令列中輸入以下指令新增數值拉桿定義時間 t,再開啟屬性視窗,將動畫種類調整為遞增。
t = Slider(0, tmax, 0.01*tmax)
3. 於指令列中輸入以下指令新增隨時間移動的點P。
P = Point({v_0*t, H - 0.5*gt**2})
4. 於指令列中輸入以下指令新增水平抛射軌跡。到步驟4為止,就是一個可以由數值滑桿控制的水平拋射動畫。
trail = Curve(v_0*t, H - 0.5*g*t**2, t, 0, tmax)

基本的水平拋射動畫


2021年8月11日 星期三

GeoGebra Classic 5 & 6 匯出 gif 檔

作者:王一哲
日期:2021/8/11


前言


昨天有同事問我,為什麼在 GeoGebra Classic 找不到匯出成 gif 檔的選項,搜尋之後才發現這個功能在 GeoGebra Classic 5 可以從選單找到,但是在 GeoGebra Classic 6 卻要用指令才行。以下用一個簡單的正弦波動畫作為例子,測試的作業系統為 Linux Mint 20.1 Ulyssa,GeoGebra 版本為 GeoGebra-Linux64-Portable-6-0-657-0 以及 GeoGebra-Linux-Portable-5-0-657-0。

GeoGebra Classic 6


首先用以下指令畫出向右移動的正弦波,數值滑桿 t 的動畫速度設定為 4、重複模式為遞增。
T = 2
ω = 2*π/T
t = Slider(0, T, 0.05*T)
f(x) = If(x >= 0, sin(x - ω*t))

GeoGebra Classic 6:正弦波


2021年8月9日 星期一

內旋輪線

作者:王一哲
日期:2021/8/9


前言


小時候有一種玩具,將一個小的圓板放在一個大的圓內側,接著用原子筆插在小圓板的某個洞中,用力地將小圓板貼著大圓內側轉動就可以畫出很複雜的圖案,這個玩具的名稱是萬花尺 (spirograph)。
萬花尺(圖片來源:https://upload.wikimedia.org/wikipedia/commons/2/24/Spirograph.jpg)

萬花尺應用到的數學原理名為內旋輪線 (hypotrochoid),以下是它的參數式。 $$ x(\theta) = (R-r) \cos \theta + d \cos \left( \frac{R-r}{r} \theta \right) $$ $$ y(\theta) = (R-r) \sin \theta - d \sin \left( \frac{R-r}{r} \theta \right) $$
以下是從維基百科上找到的例子,我們接下來試著用 GeoGebra 畫出同樣的圖。
內旋輪線動畫,R = 5,r = 3,d = 5(圖片來源:https://upload.wikimedia.org/wikipedia/commons/f/fa/HypotrochoidOutThreeFifths.gif)

內旋輪線動畫,R = 10,r = 5,d = 1,圖西對 (Tusi couple)(圖片來源:https://upload.wikimedia.org/wikipedia/commons/5/5c/Ellipse_as_hypotrochoid.gif)


2021年2月5日 星期五

圓的漸開線

作者:王一哲
日期:2021/2/5


原理


漸開線的英文為 involute 或 evolute。假設B為圓周上的點,B點繞圓心O旋轉的弧長為L,在過B點的切線上有一個P點,BP的距離等於 L,則P點的軌跡為圓的漸開線,圓的漸開線常用來作為齒輪邊緣的形狀。若使用參數式則為 $$ x = a (\cos t + t \sin t) $$ $$ y = a (\sin t - t \cos t) $$ 以下是使用 GeoGebra 繪製圓的漸開線成果。
使用 GeoGebra 繪製圓的漸開線動畫



2020年10月29日 星期四

擺線與軌跡

作者:王一哲
日期:2020/10/29

原理


假設有一個半徑為 $r$ 的小球在水平地面上純滾動,球心O點向右前進的速度為 $v$,小球繞O點順時鐘方向轉動的角速度為 $\omega$,由於小球與地面接觸點沒有相對滑動,因此 $$ v = r \omega $$ 則圓周上的某個點P移動的軌跡為擺線 (cycloid),若用參數式可以表示為 $$ x = r (t - \sin t) ~~~~~ y = r (1 - cos t) $$ 以下是使用 GeoGebra 繪製擺線的方法及成果。
使用 GeoGebra 繪製的擺線動畫



2020年9月13日 星期日

拋物面鏡反射

作者:王一哲
日期:2020/9/13
這是為了展示拋物面鏡反射的性質而製作的檔案,可以由左上角的數值滑桿調整入射光與主軸的夾角 θ、入射光照射範圍 R、光線數量 N。本次課程檔案已上傳至 GeoGebraTube,可以線上操作或下載檔案。
拋物面鏡凹面反射

拋物面鏡凸面反射

2020年8月10日 星期一

縱波示意圖

作者:王一哲

日期:2020/8/10

本次課程檔案已上傳至 GeoGebraTube,可以線上操作或下載檔案。

原理

縱波 (longitudinal wave) 又稱為疏密波,波的前進方向與介質振動方向平行,介質於平衡點附近來回振動,不會隨著波一起前進。通常我們會用很多的橫線表示介質所在的位置,藉此表現出介質疏密程度的變化。
縱波示意圖動畫 (沒有畫出平衡點)

2019年12月20日 星期五

Matplotlib 繪圖技巧:移動的點

作者:王一哲
日期:2019/12/20




前言


在這篇文章中,我利用 Matplotlib 繪製一個隨著 sin 函數移動的點,由於圖片中的物件比較簡單,算是上一篇文章〈Matplotlib 繪圖技巧:水波干涉動畫〉的前置作業。


使用Matplotlib產生的動畫



2019年10月26日 星期六

都卜勒效應及震波示意圖

作者:王一哲
日期:2019/10/25

本次課程檔案已上傳至 GeoGebraTube,可以線上操作或下載檔案。


原理


假設波源發出的聲波頻率為 $f_0$,空氣中的聲速為 $v$,波源以速度 $v_S$ 接近靜止的觀察者時,由於聲波的波長被壓縮,但空氣中的聲速不變,因此觀測到的聲波頻率會變為

$$f = \frac{v}{v-v_S} f_0$$

若波源以速度 $v_S$ 遠離靜止的觀察者時,由於聲波的波長被拉長,但空氣中的聲速不變,因此觀測到的聲波頻率會變為

$$f = \frac{v}{v+v_S} f_0$$


都卜勒效應示意圖動畫 (波源移動速度為0.6倍聲速)


2019年7月21日 星期日

於 Matplotlib 繪製的圖表中插入 LaTeX 數學式

作者:王一哲
日期:2019/7/21

前言


如果想在 Matplotlib 繪製的圖形中插入簡單的 $\LaTeX$ 數學式,例如

$$f(x) = ax^2 + bx + c$$

只需要在繪圖時加入
label=r'$f(x) = ax^2 + bx + c$'

即可。但如果要插入更複雜的數學式,例如

$$f(x) =
\begin{cases}
0.2x & \mathrm{if~~~} x < 0 \\ x & \mathrm{otherwise} \end{cases}$$ 會需要另外安裝 $\LaTeX$ 軟體,還需要另外加上一些程式碼。

2019年4月11日 星期四

電磁波示意圖

作者:王一哲
日期:2019/4/11

本次課程檔案已上傳至 GeoGebraTube,可以線上操作或下載檔案。
1. 電磁波示意圖 https://ggbm.at/aetrezwe
2. 電磁波示意圖(使用參數式) https://ggbm.at/j3zrheab




電磁波示意圖動畫




繪圖步驟


  1. 由於電場、磁場、電磁波前進方向三者互相垂直,必須開啟3D繪圖區才能顯示圖形,我們先由檢視 ⇒ 3D繪圖區或是快速鍵Ctrl+Shift+3開啟3D繪圖區。
  2. 先定義下列的變數:振幅 A = 2、波長 λ = 4、週期 T = 1、角波數 $k = \frac{2 \pi}{\lambda}$、角頻率 $\omega = \frac{2 \pi}{T}$。
  3. 新增代表時間 t 的數值滑桿,最小值為0,最大值為T,增量為0.01T,動畫效果預設為遞增。
  4. t = Slider(0, T, 0.01*T)
    
  5. 由於我希望電磁波沿著 +x 軸方向前進,若電場沿著 z 軸方向振動,則磁場必須沿著 y 軸方向振動,先用以下指令畫出磁場的波形。
  6. B(x) = If(0 <= x <= 3*λ, A sin(k*x - ω*t + 180°))
    
  7. 為了畫出磁場的振動位移,我先在 x 軸上每隔一段距離取一個點,將一個波長平均分為8等份,再於 B(x) 上畫出對應的點,最後用向量畫出箭頭。
  8. num = 4 * 2 * 3
    points = Sequence(Point({3*λ / num*i, 0, 0}), i, 1, num)
    points_B = Sequence(Point({3*λ / num*i, B(3*λ / num*i), 0}), i, 1, num)
    arrows_B = Sequence(Vector(points(i), points_B(i)), i, 1, num)
    

2019年4月7日 星期日

向量積

作者:王一哲
日期:2019/4/7

向量積 (vector product) 也稱為叉積 (cross product),在高中數學課本中被稱為外積,但是在數學上有另一個外積 (outer product),兩者是不同的。假設向量$\mathbf{a}$、$\mathbf{b}$分別定義為

$$\mathbf{a} = (x_1, y_1, z_1)$$
$$\mathbf{b} = (x_2, y_2, z_2)$$

則兩者的向量積為

$$\mathbf{c} = \mathbf{a} \times \mathbf{b} =
\begin{vmatrix}
\hat i & \hat j & \hat k \\
x_1 & y_1 & z_1 \\
x_2 & y_2 & z_2
\end{vmatrix}
= (y_1 z_2 - z_1 y_2, z_1 x_2 - x_1 z_2, x_1 y_2 - y_1 x_2)$$

相當於是向量$\mathbf{a}$、$\mathbf{b}$在空間中形成的平行四邊形的法向量。

本次課程檔案已上傳至 GeoGebraTube,可以線上操作或下載檔案,網址為 https://ggbm.at/upfavbyq


向量積



2018年11月21日 星期三

GeoGebra 繪圖技巧:反比函數

我們在〈Matplotlib 繪圖技巧:在同一張圖上繪製兩個函數、兩張圖並列〉中使用 Matplotlib 繪製反比及平方反比的函數圖形,但如果想要在函數的曲線上,沿著 x 軸方向每隔一段固定的距離畫一個點,再標示出對應的 y 軸數值,使用 Matplotlib 會有一點複雜。如果改用 GeoGebra 會比較簡單一點,成果如下圖,這個檔案的 GeoGebra 網頁版連結為 https://ggbm.at/p4hzbuza


反比函數圖形


2018年8月28日 星期二

GeoGebra初學指引

GeoGebra初學指引

日期:2018/8/7

什麼是GeoGebra

GeoGebra 的名稱是由兩個單字組成的

Geometry (幾何)+ Algebra (代數)

這是一套基於 GPL 發行的數學動態繪圖軟體,主要是以 JAVA 和 HTML5 寫成的,我覺得目前的功能已經足以應付高中課堂的需求。下圖是我用 GeoGebra 繪製的圓形波傳播方式示意圖,如果要在黑板上畫出25個點波源以及圓形波前,可能畫完就下課了,但是用 GeoGebra 可以很快就畫好,還可以當場調整點波源的數量。


圓形波傳播方式示意圖



下載及安裝

以下是 GeoGebra 的首頁(https://www.geogebra.org/)

GeoGebra 首頁


其中新數學應用與經典應用是線上版軟體,可以直接在瀏覽器上面執行。但是我們想在電腦上安裝 GeoGebra ,請按右下角的離線應用當中的應用下載。在下載頁面當中有6種不同的軟體,我選擇的是最傳統的GeoGebra Classic 5。

GeoGebra 下載頁面


下載完安裝檔之後,就是 Windows 傳統的安裝方式,全部採用預設值,一直按下一步就對了。如果不想安裝軟體,也可以下載免安裝版本,下載後只要解壓縮就可以使用,下載連結在此。



選擇 GeoGebra Classic 5 或 6?

以下分別是 GeoGebra Classic 5 和 6 開啟新檔案後的畫面,比較明顯的差異在於 5 的下方是輸入指令的欄位,6 的下方則是提示輸入格式的虛擬鍵盤,輸入指令的欄位被移到左側。在運行速度方面,我試著用 5 和 6 開啟同一個檔案,在執行動畫功能時,5 的運作比較流暢,6 則有點卡,因此建議以 5 為主。

GeoGebra Classic 5 開啟新檔案後的畫面


GeoGebra Classic 6 開啟新檔案後的畫面


2018年5月12日 星期六

黎曼和題目

黎曼和題目
日期:2018/5/12
這是昨天學生問我的題目,雖然我不太清楚他們為什麼會問物理老師數學問題,也許是當時找不到數學老師。因為我很久沒有複習高中數學,其實當時並沒有想出來,後來才發現那其實是黎曼和的題目,於是我用 GeoGebra 做了以下的檔案(連結在此)


  對於這樣的題目也可以寫程式去跑,雖然這樣有點暴力,但當作是驗算也不錯。我將 n 設定為 100000000,用 python 算出來的結果是 16.25000009500000,用 c 算出來的結果是 16.25000009500101,都很接近理論值 16.25,至於兩種程式語言算出來的結果為什會不一樣,這部分我就沒有深入研究。雖然數值很接近,但運算速度上差異很大,python 需要跑大約 4 分鐘,c 只需要 2.078 秒,這樣就不難理解為什麼有些人不喜歡用 python 跑大量的數運算。
python 程式碼

n = 1000000
total = 0
for i in range(1, n+1):
    total += (2*n + i)**3
print("{0:.14f}".format(total/n**4))

c 程式碼

#include <stdlib.h>
#include <stdio.h>
int main(void) {
    int i;
    double n = 100000000.0;
    double total = 0.0;
    double result = 0.0;
    for(i = 1; i <= n; i++) {
            total += (2*n + (double)i)*(2*n + (double)i)*(2*n + (double)i);
    }
    result = total / (n*n*n*n);
    printf("result = %.14f", result);
    return 0;
}

2018年2月13日 星期二

球面像差

球面像差
 日期:2018/2/13
用球面作成的凹面鏡無法將平行主軸的入射光集中在同一個點,如果想要讓球面鏡有接近抛物面鏡的效果,入射光必須靠近主軸,球面的曲率半徑要夠大。我的目標是畫出可以自己調整半徑、入射光範圍、入射光數量的圖,另外也用同樣的方式畫出抛物線版本的圖。GeoGebraTube 的連結在此:1. 球https://ggbm.at/TEJPHsya   2. 抛物線  https://ggbm.at/d2khJ7t2 
球面像差最終成果

2018年2月12日 星期一

二次曲線光學性質

二次曲線光學性質
 日期:2018/2/12
更新:
感謝晞安老師提醒,雙曲線也有光學性質,從一個焦點發出的光線經過雙曲線反射後,反射光的延長線會經過另一個焦點。
以前在高中數學會學到二次曲線的光學性質:1. 從橢圓其中一個焦點發出的光,經過橢圓面反射後會通過另一個焦點。 2. 平行主軸的入射光經過抛物面反射後會匯聚在焦點。基本上物理只會用到抛物面,不過我把兩個圖都畫出來,GeoGebraTube 的連結在此:1. 橢圓 https://ggbm.at/GGbB9kGH   2. 抛物線https://ggbm.at/RSPYhcBF   3. 雙曲線 https://ggbm.at/dA3JehQw 

橢圓繪圖步驟

1. 新增控制半長軸 a、焦距 c 的數值滑桿,指令為
a = Slider(1, 5, 0.1)
c = Slider(0, a-0.1, 0.1)
由於橢圓 a > c,故 c 的極大值設為 a - 0.1。
2. 在原點上新增點 O。
O = Point({0, 0})
3. 利用 Segment 指令,以 O 為起點向右畫出長度為 c 的線段,線段的右端會自動新增一個點,將它重新命名為 C1,再用點對稱畫出左側的焦點 C2,指令為
f = Segment(O, c)
C_2 = Reflect(C_1, O)
這樣做的用處在於,當我們拖曳 C1時只會旋轉橢圓,不會改變焦距 c。

2018年2月8日 星期四

折射定律

折射定律
 日期:2018/2/8
折射定律 (law of refraction) 或稱為司乃耳定律 (Snell's law) 的型式為 n1 sin θ1 = n2 sin θ2 ,當 n1 > n2 時可以算出臨界角 θc = sin-1 (n2 / n1),若 θ1 > θc 則發生全反射。我已經將檔案上傳至 GeoGebraTube,連結在此 https://ggbm.at/Xcxnvk2r   

折射定律步驟

1. 新增控制兩介質折射率n1、n2、入射角 α 的數值滑桿,指令為
n_1 = Slider(1, 2, 0.1)
n_2 = Slider(1, 2, 0.1)
α = Slider(0°, 89°, 1°)
再手動將 n1 調整為1,n2 調整為1.38,α 調整為 60°。
2. 在原點上新增點 O,在 x 軸上畫直線作為兩介質的交界面,在 y 軸上畫直線作為法線
O = Point({0, 0})
f = Line(O, xAxis)
g = Line(O, yAxis)
3. 在法線上新增點 A,再拖曳到(0, 4),畫上過點 A 並垂直於法線 g 的直線 h
A = Point(g)
h = PerpendicularLine(A, g)
4. 將點 A 對點 O 順時鐘方向旋轉角度 α 變為點 A',畫出射線 i 作為入射光,再隱藏點 A'
A' = Rotate(A, -α, O)
i = Ray(O, A')
5. 畫出射線 i 與直線 h 的交點 B,再畫出角 BOA 作為入射角 θ1
B = Intersect(h, i)
θ_1 = Angle(B, O, A)
折射定律範例步驟 1 ~ 5 成果

光槓桿

光槓桿
 日期:2018/2/8
光槓桿是反射定律的應用,當入射光不動時,如果平面鏡旋轉角度 θ ,則反射光會旋轉 2θ。我已經將檔案上傳至 GeoGebraTube,連結在此 https://ggbm.at/yBd3mBDr

光槓桿繪圖步驟

1. 選取新點工具,用滑鼠畫出點A(-5,0)、B(5,0)。
2. 選取線段工具,用滑鼠左鍵在點A、B上各按一下。或是用指令
f = Segment(A, B)
將線段調粗、改為藍色虛線當作平面鏡原來的位置。
3. 新增控制平面鏡夾角θ用的數值滑桿,最小值0°,最大值90°,增量1°。或是用指令
θ = Slider(0°, 90°, 1°)
可以使用快速鍵 Alt + O 輸入 ° ,這樣會比按虛擬鍵盤方便。
4. 選取中心點工具,用滑鼠左鍵在點A、B上各點一下畫出中心點C,也就是入射光照到平面鏡的位置,平面鏡旋轉的中心點。或是用指令
C = Midpoint(A, B)
光槓桿步驟 1 ~ 4 成果