gpt4 book ai didi

math - 如何找到反射光线的角度以匹配一个点

转载 作者:行者123 更新时间:2023-12-02 15:41:50 25 4
gpt4 key购买 nike

这是我正在制作的一款坦克游戏

请看图片以获得清晰的想法:link text

我想预先计算出击中点 T2 的精确角度。

T1:点开始

T2:点目标

V1(a,b):线

反射(reflect)点:这就是我要找的:)

编辑:看到一些“代码”会很酷:p

最佳答案

查看反射过程中线条/向量发生的变化会很有用。维基百科为此提供了一张漂亮的图片:

reflection

在这张照片中,在适当的反射中,两个角度相同

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

fancy diagram

请注意,根据反射定律,角度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< 找到您的反射(reflect)点/code> 到交叉点的 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 = |诉。 r_s |,其中 .dot product运算符(operator)。这可以通过 [l,m] 找到。 [n,o] = l*n + m*o
  6. 距离 B = |诉。 r_h |

找到AB 后,找到P,这是与墙平行的距离。为此:

  1. 找到q,这是从命中坦克到射击坦克的向量
  2. 距离 P = |瓦。 q |

现在您有了 ABP,您有两条路可走:

  1. 首先在上面的方法中求解 C,然后找到从你的射击坦克和你的墙开始的 v 的交点,然后添加C*w 到那个交点。

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

关于math - 如何找到反射光线的角度以匹配一个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3113359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com