两个磁铁的磁力线
这篇文章会沿用“简单磁铁效果”的范例,在 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强度”,使得不同强度时,根据比例就会有不同的变化。
完成效果
完成后,点击绿旗,舞台上就会模拟出现两个磁铁的磁力线。
范例解答
范例解答:两个磁铁的磁力线
微信扫码关注
抖音扫码关注