- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我正在制作的一款坦克游戏
请看图片以获得清晰的想法:link text
我想预先计算出击中点 T2 的精确角度。
T1:点开始
T2:点目标
V1(a,b):线
反射(reflect)点:这就是我要找的:)
编辑:看到一些“代码”会很酷:p
最佳答案
查看反射过程中线条/向量发生的变化会很有用。维基百科为此提供了一张漂亮的图片:
在这张照片中,在适当的反射中,两个角度相同。
现在,这与您有什么关系?我们再看看你的情况。
请注意,根据反射定律,角度a
和b
是相等的。这对我们有好处,因为如果我们知道这一点,我们就知道 c
和 d
也相等! (它们是直角三角形)
所以我们知道:
a = b
c = d
我们很快意识到我们有相似三角形。意思是,对应边彼此成比例。数学上的意思是:
A / C = B / D
A / B = C / D
A / (A+B) = B / (A+B) = C / P = D / P
因此,如果您知道 A
和 B
,您应该知道,您可以通过添加 C< 找到您的反射(reflect)点/code> 到交叉点的 x 值。
你可以这样找到C:
Given:
A (distance from shooting tank to wall)
B (distance from target tank to wall)
P (x distance between points)
Find:
C (x distance from shooting tank where wall is to be hit)
A / (A+B) = C / P
C = A*P / (A+B) <- here it is
例如,如果您的第一个水箱位于 (1,5)
,您的第二个水箱位于 (3,7)
,并且您的墙是 x 轴:
A = 5
B = 7
P = 3-1 = 2
therefore:
C = 5*2 / (5+7)
= 10/12
= 5/6
因此,如果您的坦克想要击中位于 (3,7)
的坦克,则它应该朝 (0,5/6)
射击。
对于更通用的解决方案:
if the wall is the X axis, and you have shooting tank at (s_x,s_y)
and hit tank at (h_x,h_y), the point to be shot at is:
[ s_x + s_y * (h_x-s_x) / (h_y + s_y), 0 ]
替代方案,任意墙放置/方向
上述解决方案的问题是您的墙必须是您的 x 轴。如果不是呢?
首先,您需要找到每个点到墙的距离 -- A
和 B
:
- 找到
w
,也就是unit vector朝墙的方向。
- 从
w
,找到v
,它是垂直于墙的单位向量。如果 w = [x,by]
,v = [-y,x]
。
- 找到
r_s
,这是从你的射击坦克到你墙上任何已知点的矢量。
- 找到
r_h
,它是从你的命中坦克到你墙上任何已知点的向量。
- 距离
A = |诉。 r_s |
,其中 .
是 dot product运算符(operator)。这可以通过 [l,m] 找到。 [n,o] = l*n + m*o
- 距离
B = |诉。 r_h |
找到A
和B
后,找到P
,这是与墙平行的距离。为此:
- 找到
q
,这是从命中坦克到射击坦克的向量
- 距离
P = |瓦。 q |
现在您有了 A
、B
和 P
,您有两条路可走:
首先在上面的方法中求解 C,然后找到从你的射击坦克和你的墙开始的 v
的交点,然后添加C*w
到那个交点。
你可以找到你必须拍摄的角度(从 v
),它是 P/(A+B)
的反正切。 p>
关于math - 如何找到反射光线的角度以匹配一个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3113359/
我是一名优秀的程序员,十分优秀!