Ima*_*cha 1 math trigonometry artificial-intelligence
这是我正在制作的坦克游戏
请参阅图片以获得清晰的想法:链接文字
我想预先计算exacte角度以达到Point T2.
T1:点开始
T2:指向目标
V1(A,B):线
反思点:这就是我要找的:)
编辑:看到一些"代码"会很酷:p
在反射过程中看到线条/矢量会发生什么变得很有用.维基百科为此提供了一个很好的图片:
在这张照片中,在适当的反射中,两个角度都是相同的.
现在,这与你有什么关系?让我们再看看你的情况.
花式图http://img59.imageshack.us/img59/7939/reflector.png
注意,由于反射定律,角度a
和b
相等.这对我们有好处,因为如果我们知道这一点,我们知道c
并且d
也是平等的!(它们是直角三角形)
所以我们知道:
a = b
c = d
Run Code Online (Sandbox Code Playgroud)
我们很快意识到我们有类似的三角形.意思是,相应的边与彼此成正比.意思是,数学上:
A / C = B / D
A / B = C / D
A / (A+B) = B / (A+B) = C / P = D / P
Run Code Online (Sandbox Code Playgroud)
所以,如果你知道A
并且B
,你应该,你可以找到你的反射点加入C
到路口的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
Run Code Online (Sandbox Code Playgroud)
例如,如果您的第一个坦克位于,(1,5)
而您的第二个坦克位于(3,7)
,并且您的墙是x轴:
A = 5
B = 7
P = 3-1 = 2
therefore:
C = 5*2 / (5+7)
= 10/12
= 5/6
Run Code Online (Sandbox Code Playgroud)
因此,(0,5/6)
如果它想要撞到一辆坦克,那么你的坦克应该射向(3,7)
.
对于更通用的解决方案:
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 ]
Run Code Online (Sandbox Code Playgroud)
上述解决方案的问题在于您的墙必须是您的x轴.如果不是怎么办?
首先,您需要找到从每个点到墙壁的距离 - A
并且B
:
w
,这是墙的方向上的单位向量.w
,找到v
,这是垂直于墙壁的单位矢量.如果w = [x,by]
,v = [-y,x]
.r_s
,这是从你的射击坦克到你墙上任何已知点的矢量.r_h
,这是从您的命中坦克到您墙上任何已知点的矢量.A = | v . r_s |
,那里.
是点积运算符.这可以通过以下方式找到[l,m] . [n,o] = l*n + m*o
B = | v . r_h |
一旦找到A
并B
找到P
与墙壁平行的距离.要做到这一点:
q
,这是从命中坦克到射击坦克的向量P = | w . q |
现在你有了A
,B
和P
,你有两种方法:
找到墙上的目标点,首先在上面的方法中求解C,然后找到v
从射击坦克和墙壁开始的交点,并添加C*w
到该交点.
你可以找到v
你必须射击的角度(从),它是反正切P/(A+B)
.