如何找到反射光线的角度以匹配一个点

Ima*_*cha 1 math trigonometry artificial-intelligence

这是我正在制作的坦克游戏

请参阅图片以获得清晰的想法:链接文字

我想预先计算exacte角度以达到Point T2.

T1:点开始

T2:指向目标

V1(A,B):线

反思点:这就是我要找的:)

编辑:看到一些"代码"会很酷:p

Jus*_* L. 5

在反射过程中看到线条/矢量会发生什么变得很有用.维基百科为此提供了一个很好的图片:

反射

在这张照片中,在适当的反射中,两个角度都是相同的.

现在,这与你有什么关系?让我们再看看你的情况.

花式图http://img59.imageshack.us/img59/7939/reflector.png

注意,由于反射定律,角度ab相等.这对我们有好处,因为如果我们知道这一点,我们知道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:

  1. 查找w,这是墙的方向上的单位向量.
  2. w,找到v,这是垂直于墙壁的单位矢量.如果w = [x,by],v = [-y,x].
  3. 查找r_s,这是从你的射击坦克到你墙上任何已知点的矢量.
  4. 查找r_h,这是从您的命中坦克到您墙上任何已知点的矢量.
  5. 距离A = | v . r_s |,那里.点积运算符.这可以通过以下方式找到[l,m] . [n,o] = l*n + m*o
  6. 距离 B = | v . r_h |

一旦找到AB找到P与墙壁平行的距离.要做到这一点:

  1. 查找q,这是从命中坦克到射击坦克的向量
  2. 距离 P = | w . q |

现在你有了A,BP,你有两种方法:

  1. 找到墙上的目标点,首先在上面的方法中求解C,然后找到v从射击坦克和墙壁开始的交点,并添加C*w到该交点.

  2. 你可以找到v你必须射击的角度(从),它是反正切P/(A+B).