Math 如何找到与点匹配的反射光线角度

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相交。从这一点

这是我正在做的坦克游戏

请参阅图片以了解清楚的想法:

我想预先计算出撞击点T2的准确角度

T1:起点

T2:点目标

V1(a,b):直线

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


编辑:看到一些“代码”会很酷: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
    ,您有两条路要走:

  • 在墙上找到要瞄准的点,首先用上述方法求解C,然后从射击坦克和墙壁开始,找到
    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
    ,它是从命中坦克到射击的向量