兩個磁鐵的磁力線
這篇文章會沿用「簡單磁鐵效果」的範例,在 Scratch 裡使用函式、數學計算、重複、定位、旋轉...等積木,實作兩個磁鐵之間的磁力線效果 ( 進一步更可以控制磁鐵的強度 )。
開啟範例
本篇教學為「簡單磁鐵效果」一文的延伸,請先開啟範例進行編輯。
角色設定
在角色編輯區,複製藍色磁鐵角色,將角色改成紅色,三個角色的名稱改成「黑色磁鐵線」、「藍磁鐵」和「紅磁鐵」。
積木程式原理 ( 藍色、紅色磁鐵 )
點擊「藍色圓形磁鐵」角色,設定點擊綠旗時的動作:
- 設定角色為「可拖曳」,定位在舞台左側 (-150, 0)。
- 使用重複無限次積木。
- 新增 ax 和 ay 兩個變數。
- 每次重複將 ax 設定為 x 座標,ay 設定為 y 座標。
點擊「紅色圓形磁鐵」角色,設定點擊綠旗時的動作:
- 設定角色為「可拖曳」,定位在舞台右側 (150, 0)。
- 使用重複無限次積木。
- 新增 bx 和 by 兩個變數。
- 每次重複將 bx 設定為 x 座標,by 設定為 y 座標。
積木程式原理 ( 黑色磁鐵線 )
因為舞台上同時有兩個磁鐵,所以磁鐵線必須要判斷「比較靠近哪個磁鐵」,根據距離進行對應的轉動,空間中兩點間的距離,可以參考下方圖片公式:
點擊「黑色磁鐵線」角色,從左側清單裡,新增「a距離」和「b距離」兩個變數,以及新增一個名為「兩點間直線」的函式,函式包含四個參數,勾選「執行完成後再更新畫面」。
編輯「兩點間直線」函式內容,根據兩點間的公式做設定:
- 設定變數 a 距離為「( x1 平方 + y1 平方 ) 的平方根」。
- 設定變數 b 距離為「( x2 平方 + y2 平方 ) 的平方根」。
編輯當分身產生的程式:
- 執行兩點間直線的函式,將兩點座標相減的數值,帶入函式的參數。
- 函式執行後,會根據參數,計算得到「a距離」和「b距離」兩個變數的數值。
- 使用邏輯判斷,如果「a距離」小於「b距離」,表示比較靠近藍磁鐵,就轉向藍磁鐵。
- 使用邏輯判斷,如果「a距離」大於「b距離」,表示比較靠近紅磁鐵,就轉向紅磁鐵。
完成後,點擊綠旗,舞台上就會看到靠近藍色磁鐵的磁鐵線轉向藍色,靠近紅色磁鐵的轉向紅色。
積木程式原理 ( 模擬磁力線 )
做到這一個步驟,雖然可以讓磁鐵線轉向,但對於模擬磁力線來說,所有的磁鐵線都會被兩個磁鐵所影響,而不是像目前的「二分法」,所以接著要對「兩點間直線」的函式進行修改,新增「ab距離」和「h」兩個變數:
- ab 距離:根據公式,計算藍磁鐵和紅磁鐵間的距離。
- h:磁鐵線和紅藍磁鐵間的距離,如果「a距離 + b距離 > ab距離」,表示磁鐵線越遠離兩個磁鐵的中線。
新增「a強度」和「b強度」兩個變數,預設值 5,表示兩個磁鐵的強度。
新增一個名為「旋轉方向」的函式,增加一個參數 deg,勾選「執行完畢再更新畫面」。
觀察舞台上的兩個磁鐵,磁鐵組成的區域共有八個,下圖呈現對應的數值判斷:
根據八個對應的數值,編輯「旋轉方向」的函式:
- 新增變數 n,數值為 0,作為輔助邏輯判斷使用。
- 使用「如果...那麼」積木,進行對應的邏輯判斷 ( 額外判斷如果 n 為 0 )。
- 如果符合條件,將 n 設定為 1。
- 全部判斷結束後,再將 n 設定為 0。
為什麼要多一個變數 n 呢?因為 Scratch 的邏輯判斷條件有限,為了不讓後面的判斷影響到前面,例如前面的判斷將角度增加為 180,當後面判斷到 180 的時候,就會又把角度作修改。
八個判斷的條件列表如下:
方向區間 | 距離比較 | 旋轉方向 |
---|---|---|
0> 方向 > -90 | a距離 < ab距離 | 左轉 |
0> 方向 > -90 | a距離 > ab距離 | 右轉 |
90 > 方向 > 0 | b距離 < ab距離 | 右轉 |
90 > 方向 > 0 | b距離 > ab距離 | 左轉 |
-90 > 方向 > -180 | a距離 < ab距離 | 右轉 |
-90 > 方向 > -180 | a距離 > ab距離 | 左轉 |
180 > 方向 > 90 | b距離 < ab距離 | 左轉 |
180 > 方向 > 90 | b距離 > ab距離 | 右轉 |
最後修改分身產生的程式:
- 邏輯判斷加入「強度」的變數。
- 邏輯判斷後,執行「旋轉方向」函式,函式參數使用「5 x b強度 / a強度」或「5 x a 強度 / b強度」,使得不同強度時,根據比例就會有不同的變化。
完成效果
完成後,點擊綠旗,舞台上就會模擬出現兩個磁鐵的磁力線。
範例解答
範例解答:兩個磁鐵的磁力線
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~