这是我正在制作的坦克游戏
请参阅图片了解明确的想法:link text
我想预先计算exacte角度以达到T2点。
T1:点开始
T2:指向目标
V1(a,b):行
反映点:这就是我要找的东西:)
编辑:看到一些“代码”会很酷:p
答案 0 :(得分:5)
查看反射过程中线条/矢量会发生什么变得很有用。维基百科为此提供了一个很好的图片:
在这张照片中,在适当的反射中,两个角度相同。
现在,这与你有什么关系?让我们再看看你的情况。
fancy diagram http://img59.imageshack.us/img59/7939/reflector.png
请注意,由于反射定律,角度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
添加到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
所以如果你想要在(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 ]
上述解决方案的问题在于您的墙必须是您的x轴。如果不是怎么办?
首先,您需要找到从每个点到墙的距离 - A
和B
:
w
,这是墙上方向的unit vector。w
,找到v
,这是垂直于墙的单位矢量。如果w = [x,by]
,v = [-y,x]
。r_s
,这是从你的射击坦克到你墙上任何已知点的矢量。r_h
,这是从您的命中坦克到您墙上任何已知点的矢量。A = | v . r_s |
,其中.
是dot product运营商。这可以通过[l,m] . [n,o] = l*n + m*o
B = | v . r_h |
找到A
和B
后,找到P
,这是与墙壁平行的距离。要做到这一点:
q
,这是从命中坦克到射击坦克的向量P = | w . q |
现在您有A
,B
和P
,您有两种方法可以:
找到墙上的目标,首先在上面的方法中求解C,然后找到从你的射击坦克和你的墙开始的v
的交点,并添加{{1到那个交叉点。
您可以找到必须拍摄的角度(来自C*w
),它是v
的反正切。
答案 1 :(得分:1)
在V1的另一侧反射T2,使用V1作为反射轴(我们将这个新点称为T2'); T1和T2'之间的线将在您想要的点处与V1相交。从这一点来看,需要通过简单的三角法来确定任何角度。
http://en.wikipedia.org/wiki/Transformation_%28geometry%29#Reflection