💡返回主题
应用:任意两点方向的计算
说完了距离,再看看方向吧:
如图,玩家的坐标是(30, -10),敌人的坐标是(-10, 20)。计算面向敌人的方向。
不管怎样,先计算相对坐标:
x = 敌人x - 玩家x
= (-10) - 30
= -40
y = 敌人y - 玩家y
= 20 - 10
= 30
敌人相对玩家的坐标是(-40, 30)。
计算方向时,坐标是负数对结果有影响吗?我们可以试试。
使用三角形边长:
θ = arctan(40/30)
= 53.13
使用敌人的相对坐标:
θ = arctan((-40)/30)
= -53.13
结果差了一个负号!
所以说这里不能用坐标代替边长吗?
别着急。如果题目问的是夹角,那么答案应该是53.13°; 但是,这里题目问的是方向,而Scratch中的方向……
如果用三角形边长,算出来的夹角一定是正的。
想得到Scratch中的方向,还需要单独加个负号; 而如果用坐标,得到的就是Scratch中的方向,不需要另外讨论了。
所以说这只是个巧合,还是所有方向都如此?
其实我们之前就已经做过实验了:
运行结果:
看来,上半部分正确确实是个巧合,下半部分就错了。
但处理起来也很简单:在y<0(也就是“下半部分”)时让结果增加180°
这样,我们只要知道坐标,就可以计算任意一点到另一点的方向了。
最后整理一下吧:
// 计算相对坐标
x = 目标x - 自身x
y = 目标y - 自身y
// 计算方向
θ = arctan(x/y)
if y < 0:
θ += 180
以及Scratch版(以鼠标为例):
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=simple-math/simple/lec0504&type=comment"
title="{小Simple也能看懂的Scratch常用数学知识 0504}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>
本页索引