首页 > 解决方案 > 获取距离 x 到两个向量的 Vector2

问题描述

我想计算与 PositonA 和 PositionB 距离相同的位置。

例子:

位置A:(3,2)
位置B:(5,4)
距离:5

如果我没记错的话,有两种可能性,但我不知道如何数学计算。

更新:根据mrk的回答,我调整了这个问题,虽然我之前不清楚它是三维空间中的一个圆圈。非常感谢你。

我添加了一张图片来阐明二维变体。

目标是根据两个攻击者的位置计算最佳逃生路线。在此示例中,距离固定为 5,但稍后是可变的。

例子

标签: c#vector

解决方案


根据您的条件,您会得到三个方程,其中包含三个变量(X、Y、Z),它们是条件成立的点 P 的坐标。根据您的点 A (A1, A2, A3) 和 B (B1, B2, B3)。

第一个方程反映了一个事实,即点 P 到 A 和 B 的距离相同

Math.Pow(X - A1, 2) + Math.Pow(Y - A2, 2) = Math.Pow(X - B1, 2) + Math.Pow(Y - B2, 2)

第二个方程反映了一个事实,即点 P 与点 A 的距离为 d (= 5)

Math.Pow(X - A1, 2) + Math.Pow(Y - A2, 2) + Math.Pow(Z, 2) = Math.Pow(d, 2)

第二个方程反映了一个事实,即点 P 与点 B 的距离为 d (= 5)

Math.Pow(X - B1, 2) + Math.Pow(Y - B2, 2) + Math.Pow(Z, 2) = Math.Pow(d, 2)

这给你留下了一个二次方程系统。您现在可以通过求解方程 1 的 X 并插入方程 2 并求解该方程的 Y 然后将 X 和 Y 的项插入方程 3 来求解它,以这种方式您可以求解 Z。现在您采用相同的方式返回,在方程 2 中插入 Z 的解并求解 Y,最后在方程 1 中插入 Y 和 Z 的解以求解X。实例)

可以在此处找到如何在 C# 中求解二次方程组的示例。

注意: 距离 5 可以被认为是围绕点 A 和 B 的球体。在 2D 中,这将导致两个圆相互交叉的解决方案。在 3D 中,正如您在图片中看到的那样,这将导致无限数量的可能解决方案,因为 2 个球体重叠,形成一个圆。

这可能会帮助您为任务选择合适的方法,因为您需要添加至少一个条件才能获得点的特定坐标。

https://i.stack.imgur.com/aI5D6.png

更新:

鉴于有两名攻击者,任务现在改为寻找最佳逃生路线。我们的播放器两侧各有一个。

在不关心距离值的情况下,很明显,我们想要逃避与攻击者 1 (A) 和攻击者 2 (B) 的连接正交,以最大化两者的距离:

因此,逃生路线的向量由标量积给出:

(A1-B1) * (X-0.5*(B1-A1)) + (A2-B2) * (Y-0.5*(B2-A2))  = 0

由于我们只关心逃生的方向,您可以根据需要设置 X 或 Y 并求解其他变量。

如果您确实关心,请引入包含您关心的条件的第二个方程,例如新向量的长度并求解 X 和 Y


推荐阅读