最新消息:680元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

Scratch教程:远近高低各不同

Scratch 少儿编程 2237浏览 0评论

友情提示:680元/半年,儿童学编程,就上码丁实验室

在本系列文章中,作者提出了对周围环境进行探测的“探测器”概念。给出了探测器的多种分类,对基于角色运动的“位置探测器”、基于大小的“尺寸探测器”、基于不同造型的“造型探测器”及基于颜色的“颜色探测器”进行了研究和说明。

 

本篇将研究一种有趣的探测器,

用于对碰到的边界的方向或角度进行检测。

小球反弹

这个探测器源于一个小球反弹的游戏。游戏的内容是一个小球在碰撞到其它物体时会反弹回来。这种情况下,关键是对移动方向变化的判断,在碰到边界时,可以使用现成的“碰到边缘反弹”积木进行处理。但如果需要判断碰撞到其它物体的反弹时,就需要进行自己的处理了。

 

根据物理原理,一个小球在碰撞到一个面时,入射路径与反射路径的中线就是碰撞点处面的法线。所以为了计算出反弹方向,首先需要得到法线的方向,也可以说是得到切线的方向(由于切线与法线垂直)。

 

远近高低各不同

那么在碰到边界时,如何得到切线的方向呢。

根据切线的数值计算方法,如果知道一个点左右两个点A、B的位置,可以近似使用两点连线AB的斜率代替切线的方向。

远近高低各不同

那么,主要的问题就是得到A与B的位置。如何得到呢?可以这样考虑:以碰撞点为圆心画一个圆,就与边界交于AB两点,这样就可以得到两个交点了。

远近高低各不同

 但Scratch中没有提供直接的方法,我们还需要自己想办法。参考之前的造型探测器,可以制作一个SEEKER去探索圆周上的点。

 

制作方法

1先制作一个球,再制作一个SEEKER造型。

远近高低各不同

现在SEEKER的造型只是在中心点后(左侧)的一个小点。

那么如何使用这个SEEKER呢。

 

2看程序

远近高低各不同

这是球运动的主程序,其中通过findangle自定义积木寻找两个交叉点对应的角度,并计算出法线角度和切线角度。

FindAngle程序如下。

远近高低各不同

思路如下

将造型切换为SEEKER,面向球前进的方向(这时SEEKER的点在背后),先向右旋转,直到碰到黑色,记录为a1,再向左旋转,直到碰到黑色,记录为a2,则a1与a2的平均值就是法线的方向。这样就能够计算出反射的角度了。

应用这个方法,就能够制作出小球在不同表面上反弹的效果了。

 

远近高低各不同

在使用“角度探测器”时,需要

 
注 意

1  如果碰撞点正好处于一个折点,可能会发生误判。

2  由于有寻找交叉点的过程,所以会减慢运行的速度。上面的程序只在加速模式下运行才好一些。

3  如果使用不同位置,不同特性的探测器,还可能对此方法进行进一步的扩展。得到更好的效果。

 

 

 

总结

 

 

1  使用角度探测器,即旋转的探测点,可以对周围的环境进行检测。

2  探测器展示了一种自动探索的思路,类似于简单的人工智能。

 

您必须 登录 才能发表评论!