解决问题
再回到前面的问题:
这里的30°是和x轴正半轴的夹角,就是我们公式里的θ,无需转换。
x=50,y=50,θ=30°,代入公式:
x' = x*cos(θ) + y*sin(θ)
= 50*cos(30) + 50*sin(30)
= 43.3 + 25
= 68.3
y' = y*cos(θ) - x*sin(θ)
= 50*cos(30) - 50*sin(30)
= 43.3 - 25
= 18.3
光炮的宽度是20,矩形两条边的高度分别是10和-10。
不过我们这次换一种写法:
0 < 68.3 < 100,x坐标满足条件abs(18.3) > 10,y坐标不满足条件
绝对值(absolute,简称abs)绝对值,指的是一个数去掉负号后的结果(如果是正数就不变),通常简称abs。比如:
- 5去掉负号后是5,因此abs(-5) = 5
- 2去掉负号还是2,因此abs(2) = 2
拓展阅读一个数取绝对值,可以表示“它到0的距离”。比如:
- 2到0的距离是2,abs(2) = 2
- 5到0的距离是5,abs(-5) = 5
两个数相减后取绝对值,可以表示这两个数之间的距离。比如:
- 5到2的距离是3,abs(5 - 2) = 3
- 2到5的距离是7,abs((-2) - 5) = abs(-7) = 7
很显然,18.3到0的距离是18.3,超过了10,所以光炮没有打中。
最后,我们再换个数据练一练,检验一下学习的成果:
如图,玩家在(-20, 30),敌人在(50, -20)。玩家向120°方向发动了光炮攻击(伤害范围宽=20,射程无限远)。请问光炮是否能打到敌人?
第一步,计算相对坐标。
x = 50 - (-20) = 70
y = (-20) - 30 = (-50)
第二步,进行坐标系旋转变换。
注意了,这里的120°是Scratch旋转坐标系的,应用公式前需要进行转换。
θ = 90° - 120° = -30°
然后代入旋转变换公式:
x' = x*cos(θ) + y*sin(θ)
= 70*cos(-30) + (-50)*sin(-30)
= 60.62 + 25
= 85.62
y' = y*cos(θ) - x*sin(θ)
= (-50)*cos(-30) - 70*sin(-30)
= (-43.3) - (-35)
= -8.3
再与光炮的范围进行对比。
光炮射程无限,因此只需考虑x>0即可x' = 85.62 > 0,x坐标满足条件光炮总宽度为20,边缘到中心的宽度就是10
abs(y') = abs(-8.3) = 8.3 < 10,y坐标满足条件
因此,光炮会打中敌人。
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=simple-math/simple/lec0804&type=comment"
title="{小Simple也能看懂的Scratch常用数学知识 0804}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>
本页索引