问题引入
在正式开始前,我们先看一个问题:
如图,玩家在(20, 40),敌人在(80, 20)。玩家向正右方发动了光炮攻击(伤害范围是长=80,宽=10的矩形)。请问光炮是否能打到敌人?
看图就知道,敌人都不在矩形内,肯定不能啊。
但假如你正在制作Scratch游戏,需要编写光炮的判定程序。而这又是大地图,敌人不在舞台内,不能用<碰到>判定。又要如何解决?
这个问题并不难。我们先计算敌人的相对坐标:
x = 80 - 20 = 60
y = 20 - 30 = (-10)
在新的坐标系里,一切都好办了。
光炮的宽度是10。也就是说,矩形上下两条边的y坐标分别是5和-5。
判断敌人是否在范围内,只需要计算敌人的相对坐标是否同时满足:
0 < x < 80-5 < y < 5
很显然,
0 < 60 < 80,x坐标满足条件-10 < -5,y坐标不满足条件
所以敌人不在矩形内,光炮无法打中敌人。
热身结束,下面该进入正题了。
我们让情况再复杂一点:如果玩家是斜着开炮的话呢?
如图,玩家在(0, 0),敌人在(50, 50)。玩家向斜向上30°方向发动了光炮攻击(伤害范围是长=100,宽=20的矩形)。请问光炮是否能打到敌人?
之前讲相对坐标时,我们通过建立新的坐标系,把复杂的问题转化成了我们熟悉的情况。
受到前一题的启发,你想到办法了吗?
下面要公布答案了——
在新的坐标系里,问题又回到了我们之前熟悉的情况。
但是问题来了:敌人在新坐标系里的坐标是多少?
这个问题我们需要单独开一节来解决。
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=simple-math/simple/lec0801&type=comment"
title="{小Simple也能看懂的Scratch常用数学知识 0801}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>
本页索引