我得到了5个敌人在游戏中的位置。根据我选择的距离,敌人的数量可以从0到5。每次我都需要知道他们的向量,以检查是否可以通过一定数量的英雄(向量)画一条直线。
在那之后,我的英雄将不得不使用他称为墙的能力。它由两个起始向量和结束向量组成。因此,看看我的英雄是否能在队伍中的敌人身上筑起一堵墙来抓住他们。
假设有3个敌方英雄,我可以得到他们的位置。我需要知道我是否可以直接通过它们,以便在它们上使用该能力。

下面是在游戏中使用异能的样子

下面是其中一个英雄的矢量

异能本身可以在某一点上扭曲。但不管怎样,有必要让这堵墙触及几个英雄

无论我把鼠标移动到哪里,我都可以把它放在所需的位置。但不幸的是,这需要很多时间,所以我想自动化

墙本身的坐标,或者更确切地说,它的两个边缘,我也可以得到,但只有在使用了这个能力之后。

发布于 2021-06-07 04:07:36
平面上的任何直线都可以用带有(a, b) ≠ (0, 0)的方程a*x + b*y + c = 0来描述。请注意,如果您有一个这种形式的方程,那么将每个系数a, b, c与相同的数字相乘,就会得到一个描述同一条线的方程。这就是为什么(a, b, c)被称为该直线的齐次坐标矢量的原因。
你是如何找到a, b, c的?一种简单的方法是将其视为三个未知数的三个线性方程。您插入所有三个点的x和y坐标,并通过c获得a的树等式。然而,这里有一个问题。因为每个方程的右边都是零,所以a = b = c = 0始终是一个解。在那些只有一种解决方案的情况下,那就是它。所以为了有一条线,你需要不止一个解决方案。确定一组方程是否有多个解的数学工具是determinant。如果系统没有唯一解,则为零。
长话短说:三个点是共线(在一条线上),如果
⎛x1 y1 1⎞
det ⎜x2 y2 1⎟ = 0
⎝x3 y3 1⎠描述线世界的齐次坐标向量对应于该矩阵的kernel。
当然,如果您的输入坐标是浮点数,则不太可能精确为零。据推测,这堵墙在某种程度上确实允许一些错误,您需要告诉我们这一点,以便获得正确建模这一方面的答案。同时,要知道上面行列式的绝对值是由这三个点创建的三角形的proportional to the area。因此,如果你选择一个恒定的阈值,你的敌人在墙的方向上离得越远,他们在不违反该阈值的情况下偏离直线的可能性就越小。
发布于 2021-06-07 05:32:24
如果一个人更喜欢几何而不是线性代数...然后可以计算(单位向量1)的点积。Unit-Vector2)这等于它们之间的夹角之差。
因此,如果单位向量是target1的射击位置,vector2单位是target2的射击位置,依此类推。当点对点(Vector1,vector2) = 1,点对点(Vector1,vector3) =1,则这三个点是合流的。
从一个射手重复到尽可能多的目标,以确定是否部分或全部点数处于合一状态。
发布于 2021-06-07 16:42:11
从你说有一个起点和一个终点的声明中,我认为你选择了两个敌人,并想要捕获介于两者之间的任何东西。
所以你实际上不是在寻找一条可以穿过你的敌人位置的直线,而是如果他们是矩形的话。这是非常不可能的,而且对于更多的点来说,它们都是共线的几乎是不可能的。
所以它变得非常微不足道。你在开始和结束敌人之间画了一条线。然后你检查剩下的敌人到那条线的距离和你AoE的宽度。也许你也想在计算中处理一些车身宽度。
https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line
https://stackoverflow.com/questions/67860230
复制相似问题