应用:任意两点距离的计算
说了这么多,下面要正式介绍相对坐标的作用了:
回到本章开头提出的问题:
如果玩家不在(0, 0),敌人的坐标也不全是正的,这要如何计算距离呢?
如图,玩家的坐标是(10, 20),敌人的坐标是(50, -10)。计算玩家和敌人的距离d。
我们知道,计算相对坐标相当于以玩家为中心建立一个新的坐标系,也就是说这个坐标系中玩家一定在(0, 0)。
x = 敌人x - 玩家x
= 50 - 10
= 40
y = 敌人y - 玩家y
= (-10) - 20
= -30
因此,敌人相对玩家的坐标是(40, -30)。
根据上期教程的方式找直角三角形,会发现它两条直角边的长度分别是40和30。
但是现在敌人的坐标是(40, -30)。我们还能像上次那样,直接把坐标当成边长吗?
使用三角形边长:
d² = 40² + 30²
d = sqrt(40² + 30²)
d = sqrt(1600 + 900)
d = 50
使用敌人的相对坐标:
d² = 40² + (-30)²
d = sqrt(40² + (-30)²)
d = sqrt(1600 + 900)
d = 50
结果是一样的?
看看过程就不难发现:
30² = 900 (-30)² = 900
因为“负负得正”,负号在平方后会消失,最终结果跟正数一定是一样的。
也就是说,就算坐标含有负数,也不影响我们用它计算距离。
有了勾股定理和相对坐标的帮助,我们只要知道坐标,就可以计算任意两点之间的距离了:
// 计算相对坐标
x = 目标x - 自身x
y = 目标y - 自身y
// 计算距离
d = sqrt(x² + y²)
上一期中,我们提到过一个“计算到鼠标距离”的代码:
现在是不是可以可以完全看懂了?
你可以验证一下,它的计算结果跟原版积木是不是一样的。
原版积木存在一些不足之处:比如它处理不了大地图的情况,也无法指定克隆体作为目标。如果要做大地图作品,或者计算与克隆体的距离,就只能自己手写代码了。
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=simple-math/simple/lec0503&type=comment"
title="{小Simple也能看懂的Scratch常用数学知识 0503}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>
本页索引