c# - 获取距离 x 到两个向量的 Vector2
问题描述
我想计算与 PositonA 和 PositionB 距离相同的位置。
例子:
位置A:(3,2)
位置B:(5,4)
距离:5
如果我没记错的话,有两种可能性,但我不知道如何数学计算。
更新:根据mrk的回答,我调整了这个问题,虽然我之前不清楚它是三维空间中的一个圆圈。非常感谢你。
我添加了一张图片来阐明二维变体。
目标是根据两个攻击者的位置计算最佳逃生路线。在此示例中,距离固定为 5,但稍后是可变的。
解决方案
根据您的条件,您会得到三个方程,其中包含三个变量(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 个球体重叠,形成一个圆。
这可能会帮助您为任务选择合适的方法,因为您需要添加至少一个条件才能获得点的特定坐标。
更新:
鉴于有两名攻击者,任务现在改为寻找最佳逃生路线。我们的播放器两侧各有一个。
在不关心距离值的情况下,很明显,我们想要逃避与攻击者 1 (A) 和攻击者 2 (B) 的连接正交,以最大化两者的距离:
因此,逃生路线的向量由标量积给出:
(A1-B1) * (X-0.5*(B1-A1)) + (A2-B2) * (Y-0.5*(B2-A2)) = 0
由于我们只关心逃生的方向,您可以根据需要设置 X 或 Y 并求解其他变量。
如果您确实关心,请引入包含您关心的条件的第二个方程,例如新向量的长度并求解 X 和 Y
推荐阅读
- python - 在数据框中将句子列表连接成一个
- javascript - Babel 支持浏览器 11
- asp.net - Asp.net 将奇怪的编码字符添加到 url
- android - 如何拥有可点击的背景视图,这不会导致在其顶部的视图上单击事件?
- c# - 应用程序中返回的记录数与数据库中不同
- powershell - Powershell:在函数中添加数组不起作用
- gremlin - Gremlin 查询以获取带有子顶点的顶点,即使它没有任何子顶点
- blazor - Blazor InputSelect 选项出现在下拉列表下方,不在其中
- sql - 如何在通过左连接过滤时从右表中提取所有列
- c - 使用 ffmpeg 和 sdl2 进行口吃渲染