这是一个坦克游戏我正在如何找到反射光线的角度来匹配点
请参阅PIC为清晰的思路:link text
我要预先计算exacte角度打点T2。
T1:点开始
T2:点目标
V1(A,B):线
反映点:这是我正在寻找:)
编辑:看到一些“代码”会很酷:p
这是一个坦克游戏我正在如何找到反射光线的角度来匹配点
请参阅PIC为清晰的思路:link text
我要预先计算exacte角度打点T2。
T1:点开始
T2:点目标
V1(A,B):线
反映点:这是我正在寻找:)
编辑:看到一些“代码”会很酷:p
这将会是看到反射过程中发生了什么线/载体。维基百科提供了一个很好的图片此:
在哪里,在这张照片中,适当地反映,两个角度都一样。
现在,这与你有什么关系?让我们再看看你的情况。
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
所以你的坦克如果想击中坦克(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 = | 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
的交点,从你的射击坦克和你的墙壁开始,并将C*w
添加到该交点。
您可以找到必须拍摄的角度(从v
),它是P/(A+B)
的反正切值。
在V1的另一侧反射T2,使用V1作为反射轴(我们称之为新点T2'); T1和T2'之间的直线将与您想要的点相交于V1。从这一点来看,只需简单的三角函数即可确定任何角度。
http://en.wikipedia.org/wiki/Transformation_%28geometry%29#Reflection
thana JAB.I'm去看看我是否可以实现这...并寻找其他答案。 – Imadcha 2010-06-24 20:34:10
+1比我的回答更简单/更容易。 – JAB 2010-06-24 21:12:54
thanx贾斯汀.. 如果你有任何资源“代码或伪代码”将很高兴看到它。 – Imadcha 2010-06-24 22:15:34