如何找到反射光线以匹配目标点的角度

这是我正在制作的一个坦克游戏的需求

请看图片以获得更清晰的想法:链接文本

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

T1:起始点

T2:目标点

V1(a,b):线

反射点:这是我正在寻找的:)

编辑:如果能看到一些“代码”就好了: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添加到交点的 x 值来找到您的反射点

您可以通过以下方式找到 C:

给定:
  A (射击坦克到墙的距离)
  B (目标坦克到墙的距离)
  P (两点之间的 x 距离)
查找:
  C (射击坦克到墙被击中的 x 距离)

A / (A+B) = C / P
C = A*P / (A+B)   <- 就在这里

例如,如果您的第一辆坦克位于(1,5),第二辆坦克位于(3,7),并且您的墙是 x 轴:

A = 5
B = 7
P = 3-1 = 2

因此:
C = 5*2 / (5+7)
  = 10/12
  = 5/6

因此,如果您的坦克想要击中位于(3,7)的坦克,则应该朝(0,5/6)射击。

对于更通用的解决方案:

如果墙是 X 轴,并且您的射击坦克位于 (s_x,s_y),
  并且击中坦克位于 (h_x,h_y),则要射击的点是:

[ s_x + s_y * (h_x-s_x) / (h_y + s_y), 0 ]

替代方案:具有任意墙壁位置/方向

上述解决方案的问题在于,您的墙壁必须是您的 x 轴。如果不是呢?

首先,您需要找到每个点到墙壁的距离 – AB

  1. 找到w,它是墙壁方向上的单位向量
  2. w找到v,它是垂直于墙壁的单位向量。如果w = [x,by]v = [-y,x]
  3. 找到r_s,它是从您的射击坦克到墙上任何已知点的向量。
  4. 找到r_h,它是从您的击中坦克到墙上任何已知点的向量。
  5. 距离A = | v . r_s |,其中.点积运算符。 这可以通过[l,m] . [n,o] = l*n + m*o找到
  6. 距离B = | v . r_h |

找到AB后,找到P,它是平行于墙壁的距离。 为此:

  1. 找到q,它是从击中坦克到射击坦克的向量
  2. 距离P = | w . q |

现在您有了ABP,您有两种方法可以解决:

  1. 找到墙上要瞄准的点,首先使用上述方法求解 C,然后找到从您的射击坦克开始的v与您的墙的交点,并将C*w添加到该交点。

  2. 您可以找到必须射击的角度(从v开始),它是P/(A+B)的反切线。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注