2010-06-24 89 views

回答

5

这将会是看到反射过程中发生了什么线/载体。维基百科提供了一个很好的图片此:

reflection

在哪里,在这张照片中,适当地反映,两个角度都一样

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

fancy diagram http://img59.imageshack.us/img59/7939/reflector.png

注意的是,由于反射的法则,角度ab是相等的。这对我们很好,因为如果我们知道,我们知道cd也是平等的! (他们是直角三角形)

因此,我们知道:

a = b 
c = d 

我们很快意识到,我们有相似三角形。意思是,相应的边是比例彼此。含义,数学:

A/C = B/D 
A/B = C/D 
A/(A+B) = B/(A+B) = C/P = D/P 

所以,如果你知道AB,你应该,你可以通过添加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 

例如,如果你的第一罐是(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轴。如果不是?

首先,你需要找到在墙上每个点的距离 - AB

  1. 查找w,这是在墙的方向unit vector
  2. w,找到v,它是垂直于墙的单位矢量。如果w = [x,by]v = [-y,x]
  3. 查找r_s,这是从你的射击坦克到你墙上任何已知点的矢量。
  4. 查找r_h,这是从你的击中坦克到你墙上任何已知点的矢量。
  5. 距离A = | v . r_s |,其中.dot product运营商。这可以通过[l,m] . [n,o] = l*n + m*o
  6. 的距离B = | v . r_h |

一旦你找到AB,发现P,平行于墙的距离被发现。要做到这一点:

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

现在,你有ABP,你有两种方式去:

  1. 找到在墙上的要点瞄准,首先解决C,然后找到v的交点,从你的射击坦克和你的墙壁开始,并将C*w添加到该交点。

  2. 您可以找到必须拍摄的角度(从v),它是P/(A+B)的反正切值。

+0

+1比我的回答更简单/更容易。 – JAB 2010-06-24 21:12:54

+0

thanx贾斯汀.. 如果你有任何资源“代码或伪代码”将很高兴看到它。 – Imadcha 2010-06-24 22:15:34

1

在V1的另一侧反射T2,使用V1作为反射轴(我们称之为新点T2'); T1和T2'之间的直线将与您想要的点相交于V1。从这一点来看,只需简单的三角函数即可确定任何角度。

http://en.wikipedia.org/wiki/Transformation_%28geometry%29#Reflection

+0

thana JAB.I'm去看看我是否可以实现这...并寻找其他答案。 – Imadcha 2010-06-24 20:34:10