首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有3个向量,如何检查是否可以通过它们绘制直线

有3个向量,如何检查是否可以通过它们绘制直线
EN

Stack Overflow用户
提问于 2021-06-06 22:34:00
回答 4查看 101关注 0票数 0

我得到了5个敌人在游戏中的位置。根据我选择的距离,敌人的数量可以从0到5。每次我都需要知道他们的向量,以检查是否可以通过一定数量的英雄(向量)画一条直线。

在那之后,我的英雄将不得不使用他称为墙的能力。它由两个起始向量和结束向量组成。因此,看看我的英雄是否能在队伍中的敌人身上筑起一堵墙来抓住他们。

假设有3个敌方英雄,我可以得到他们的位置。我需要知道我是否可以直接通过它们,以便在它们上使用该能力。

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

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

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

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

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

EN

回答 4

Stack Overflow用户

发布于 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的?一种简单的方法是将其视为三个未知数的三个线性方程。您插入所有三个点的xy坐标,并通过c获得a的树等式。然而,这里有一个问题。因为每个方程的右边都是零,所以a = b = c = 0始终是一个解。在那些只有一种解决方案的情况下,那就是它。所以为了有一条线,你需要不止一个解决方案。确定一组方程是否有多个解的数学工具是determinant。如果系统没有唯一解,则为零。

长话短说:三个点是共线(在一条线上),如果

代码语言:javascript
复制
    ⎛x1 y1 1⎞
det ⎜x2 y2 1⎟ = 0
    ⎝x3 y3 1⎠

描述线世界的齐次坐标向量对应于该矩阵的kernel

当然,如果您的输入坐标是浮点数,则不太可能精确为零。据推测,这堵墙在某种程度上确实允许一些错误,您需要告诉我们这一点,以便获得正确建模这一方面的答案。同时,要知道上面行列式的绝对值是由这三个点创建的三角形的proportional to the area。因此,如果你选择一个恒定的阈值,你的敌人在墙的方向上离得越远,他们在不违反该阈值的情况下偏离直线的可能性就越小。

票数 0
EN

Stack Overflow用户

发布于 2021-06-07 05:32:24

如果一个人更喜欢几何而不是线性代数...然后可以计算(单位向量1)的点积。Unit-Vector2)这等于它们之间的夹角之差。

因此,如果单位向量是target1的射击位置,vector2单位是target2的射击位置,依此类推。当点对点(Vector1,vector2) = 1,点对点(Vector1,vector3) =1,则这三个点是合流的。

从一个射手重复到尽可能多的目标,以确定是否部分或全部点数处于合一状态。

票数 0
EN

Stack Overflow用户

发布于 2021-06-07 16:42:11

从你说有一个起点和一个终点的声明中,我认为你选择了两个敌人,并想要捕获介于两者之间的任何东西。

所以你实际上不是在寻找一条可以穿过你的敌人位置的直线,而是如果他们是矩形的话。这是非常不可能的,而且对于更多的点来说,它们都是共线的几乎是不可能的。

所以它变得非常微不足道。你在开始和结束敌人之间画了一条线。然后你检查剩下的敌人到那条线的距离和你AoE的宽度。也许你也想在计算中处理一些车身宽度。

https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67860230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档