[技术贴]Scratch角度体系与数学角度体系的关系分析
scratch吧
全部回复
仅看楼主
level 4
IknowST 楼主
Scratch中的方向是一个很重要的内容,大家可以使用方向,很容易地让角色面向一个方向或向一个方向移动。但大家是否注意到了,Scratch中使用的方向体系与在数学中学习到的方向体系不是一样的呢?如果用来进行数学绘图等工作,就会遇到问题。今天,我们就在这里论述一下这个问题,研究一下他们之间的关系,更重要的是如何在两个体系之间进行换算。
我们首先看一下SCRATCH中的角度体系是什么样的。从方向积木的下拉框中可以看到,0度表示向上,90度表示向右,-90度表示向左,180度表示向下。
大家都知道一周是360度,我们可以使用下图表示Scratch中角度与方向的对应关系。可以看出,角度是沿顺时针方向增加的。每个方向上角度的两种表示方式(实际上还可以再增加或减小360度的整数倍),表示的方向是相同的。这个角度体系实际上类似于钟表中时针的角度体系,从0度0点开始,顺时针转动,90度对应3点,180度对应6点,270度对应9点。
下面,我们再来看看数学中的角度体系。如果大家学习了数学中的象限及三角函数,就会知道,在数学中角度的定义是不同的。下图中展示了数学中的角度定义。可以看到向右是0度,向上是90度,向左是180度,向下是270度,角度是按逆时针方向增加的。当然,也存在增加或减小360度整数倍的等价角度。
所以问题就来了,在有些程序中,我们要同时使用Scratch中的方向和数学中的方向。例如我们要做这样一个程序:一个小球绕一个箭头转动,而箭头要一直面向小球。在这里箭头的旋转用的是Scratch中的方向,而小球的运动是用数学的计算坐标得到的。
我们建立一个全局变量a 用于保存当前的角度。在舞台中对a进行初始化,并处理a的增加,每增加一次a发送绘制消息。
下面是箭头角色中的脚本:接收消息后,一直指向a方向。
小球运动的坐标是标准的数学方式,通过y=r*sin(a), x=r*cos(a)计算坐标,并移动到坐标处。
运行后可以看到,由于角度体系的不同,两个角色在向不同的方向运动,南辕北辙了啊 。
那么,如何解决这个问题呢?我们列表分析一下
方向 Scratch体系角度 数学体系角度 关系
可以看出同一个方向时,两个体系的角度之和正好为90度。所以我们可以得到两者的关系。这样,当知道一个体系的角度时,使用90度减去这个角度,就能够得到另一个体系中的角度了。
应用这个方法,我们改变一下上面的程序。可以修改箭头程序或球的程序,我们修改一下箭头的方向。只需要修改成下面这样。将原来的指向a方向修改为指向90-a方向。就能达到我们的要求了。
再运行一下,可以看到,箭头会一直指向球体,达到了我们的要求。
怎么样,下次再涉及到方向和角度体系的问题,就可以用这样的方式进行处理了。
[呵呵]
参考资料
1象限:
2象限角:
2018年02月10日 13点02分 1
吧务
level 15
楼主关注本吧了吗?为什么还是lv1[滑稽]
2018年02月10日 13点02分 2
原来主要在QQ群晃。试着在这里交流下。
2018年02月10日 13点02分
回复 IknowST :你在qq群里叫什么
2018年02月10日 13点02分
Marvin
2018年02月10日 14点02分
@IknowST 不错小伙子[滑稽]
2018年02月11日 11点02分
level 11
隐藏的技术大佬[真棒]
2018年02月10日 14点02分 3
前排提醒:坟贴勿回!
2019年05月27日 10点05分
level 13
[吐舌]
2018年02月11日 04点02分 4
level 12
哇,隐藏的大佬!
2018年02月12日 04点02分 5
level 8
这样才对。。。
2018年07月17日 10点07分 6
请勿挖坟
2018年07月17日 10点07分
@遧傂鼝 老兄啊,我是在纠正错误啊。。。再说了6个月没到就叫坟贴?
2018年07月17日 10点07分
回复 钱芃达 :到了一个月就算坟贴。此外你不顶起来这帖子,这帖子也没人看的
2018年07月17日 10点07分
吧务
level 15
2018年07月17日 10点07分 7
1