Math 如何找到与点匹配的反射光线角度
这是我正在做的坦克游戏 请参阅图片以了解清楚的想法: 我想预先计算出撞击点T2的准确角度 T1:起点 T2:点目标 V1(a,b):直线 反思点:这就是我要找的:)Math 如何找到与点匹配的反射光线角度,math,artificial-intelligence,trigonometry,Math,Artificial Intelligence,Trigonometry,这是我正在做的坦克游戏 请参阅图片以了解清楚的想法: 我想预先计算出撞击点T2的准确角度 T1:起点 T2:点目标 V1(a,b):直线 反思点:这就是我要找的:) 编辑:看到一些“代码”会很酷:p在V1的另一侧反射T2,使用V1作为反射轴(我们称之为新点T2');T1和T2'之间的线将在您想要的点处与V1相交。从这一点上讲,这是一个简单的三角学问题,以找出任何角度是什么 在V1的另一侧反射T2,使用V1作为反射轴(我们称之为新点T2’);T1和T2'之间的线将在您想要的点处与V1相交。从这一点
编辑:看到一些“代码”会很酷:p在V1的另一侧反射T2,使用V1作为反射轴(我们称之为新点T2');T1和T2'之间的线将在您想要的点处与V1相交。从这一点上讲,这是一个简单的三角学问题,以找出任何角度是什么
在V1的另一侧反射T2,使用V1作为反射轴(我们称之为新点T2’);T1和T2'之间的线将在您想要的点处与V1相交。从这一点上讲,这是一个简单的三角学问题,以找出任何角度是什么
查看反射过程中直线/向量的变化会很有用。维基百科提供了一幅很好的图片: 其中,在本图中,在适当的反射中,两个角度相同 那跟你有什么关系?让我们再来看看你的情况。 注意,由于反射定律,角度
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
因此,如果你的坦克想在(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
,它是墙方向的w
中,找到v
,它是垂直于墙的单位向量。如果w=[x,by]
,v=[-y,x]
r\u s
,它是从射击坦克到墙上任何已知点的向量r\u h
,它是从你的坦克到墙上任何已知点的向量A=| v。r|
,其中
是运算符。这可以通过[l,m]找到。[n,o]=l*n+m*o
B=| v。r|h|
A
和B
后,找到p
,这是平行于墙的距离。为此:
q
,它是从命中坦克到射击坦克的向量P=| w。q |
A
、B
和p
,您有两条路要走:
v
的交点,并将C*w
添加到该交点
v
),它是p/(A+B)
的反切线
观察反射过程中直线/向量的变化会很有用。维基百科提供了一幅很好的图片: 其中,在本图中,在适当的反射中,两个角度相同 那跟你有什么关系?让我们再来看看你的情况。 注意,由于反射定律,角度
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
因此,如果你的坦克想在(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
,它是墙方向的w
中,找到v
,它是垂直于墙的单位向量。如果w=[x,by]
,v=[-y,x]
r\u s
,它是从射击坦克到墙上任何已知点的向量r\u h
,它是从你的坦克到墙上任何已知点的向量A=| v。r|
,其中
是运算符。这可以通过[l,m]找到。[n,o]=l*n+m*o
B=| v。r|h|
A
和B
后,找到p
,这是平行于墙的距离。为此:
q
,它是从命中坦克到射击的向量