肥仔教程网

SEO 优化与 Web 开发技术学习分享平台

Scratch编程学算法之模拟数字生命——律动的“小水母”

Scratch编程学算法之模拟数字生命——律动的“小水母”

来自网 上的一位大咖,他在账号上发布了很多生成数字生命的有趣的公式表达式,利用这些公式,能够画出很多有趣的“生物”图像,网上也有一些用MATLAB和python编程实现的,我们可以用Scratch编程来实现吗?

那我们就以下面这个基本上可以看作是海洋生物的小水母为例子,来探索一下吧。

“小水母”的截图:

大咖的MATLAB代码截图

从代码看,编程的大致思路是:

1.用x,y构建 “基础网格”;

2. 用参数k、e、d定义 “静态生物轮廓”;

3. 用t驱动q、c实现 “动态形态”;

4. 用极坐标转直角坐标定位到屏幕。

其中,q(径向伸缩)、c(角度)是 “数字生命” 动态感的关键,而k、d则决定了 “海洋生物” 的独特形态(如弯曲的身体、起伏的体表)。

一、算法分析

(一)代码中通过循环变量i(取值范围0~10000,共 10001 个离散点)生成基础参数x和y,作为后续形态计算的 “初始输入”,类似图像的 “像素网格坐标”:

(二)、核心形态参数(决定 “数字生命” 的基础轮廓)

通过x和y推导中间变量,这些变量直接决定图像的 “静态形态”(如海洋生物的身体弧度、凸起、凹陷):

(三)、动态控制参数(实现 “闪烁 + 形态变化” 动画)

引入时间变量t(初始为 0,每帧增加π/20),让图像产生 “动态生命感”,核心是通过t调整径向尺度q和极角c:

四、最终屏幕坐标(极坐标转直角坐标,显示在画布上)

代码将 “径向长度q+ 极角c” 的极坐标形式,转换为直角坐标(画布范围0~400×0~400,中心在(200,200)),这是图像最终 “显示位置” 的公式:

二、Scratch编程实现画出“小水母”

借鉴他的思路,我们利用Scratch在作图上的优势,实现小水母的绘制。

1. 创建子程序,返回四个象限的方向角

与其它编程工具相比,这里有一个特殊的情况,就是Scratch没有内置的atan2(y,x)函数,就需要我们自己来创建一个。

atan2(y,x)是四象限反正切函数,用于计算点(x,y)与x轴正方向的夹角弧度值,其计算规则如下:

因为atan2(y,x)的基本定义就是在平面直角坐标系中,原点(0,0)到点(x,y)的有向线段与x轴正向的夹角,范围(-π, π]。

该函数通过y和x的比值确定角度,但会根据坐标象限自动调整结果范围至(-π, π]。当x>0时,直接计算arctan(y/x);当x<0时,需根据y的符号加减π来转换象限;当x=0时,直接返回±π/2或0。

象限处理逻辑

第一象限(x>0, y>0):结果为arctan(y/x),范围(0, π/2)

第二象限(x<0, y≥0):结果为arctan(y/x)+π,范围(π/2, π]

第三象限(x<0, y<0):结果为arctan(y/x)-π,范围(-π, -π/2)

第四象限(x>0, y<0):结果为arctan(y/x),范围(-π/2, 0)

特殊点:

x=0且y>0时返回π/2

x=0且y<0时返回-π/2

x=y=0时返回0。

atan2(y,x)的自定义积木(子程序)如下:

要注意,在子程序中,使用了Scratch的内置函数atan()函数,它的返回值是角度,因此在几个特殊位置我们也用了角度制,比如正负90度和0度。

2. 计算小水母的点坐标并落笔描点的子程序:

3.主程序调用子程序画出小水母。

单色的小水母:

三、小结与拓展

1.大咖给出的“海洋生物”的曲线的方程,构成比较复杂,涉及多个参数,经过多次函数迭代运算,极易出错,在使用运算模块时要特别细心。

2.鉴于Scratch的特殊性,需要自建子程序实现非内置函数功能,还要注意不同编程语言的角度制的差异,Scratch采用的是角度制,而其它语言大多是弧度制。屏幕坐标系的设置也有差异。

3.后面我们将用Scratch绘出其它几种“海洋生物”,敬请期待。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言