从给定的点和角度找到矢量幅度的最便宜的方法

Cheapest way to find Vector magnitude from a given point and angle

我正在尝试确定玩家在平面上的深度位置,它定义了 2D 格斗游戏中的可行走地面。问题如下图所示:

C代表玩家当前位置。我需要找到矢量V的大小。由于我的线性代数不强,我能想到的一件事是:确定L1和L2的交点P,然后从AP中获取大小。但是,我觉得一定有一种更简单的方法来找到 V,因为我已经知道向量应该具有的角度,由来自 AB 的向量给出。

任何意见都将不胜感激,因为我期待着加强我的线性代数游戏。

编辑:由于我缺乏绘画技巧,所以不清楚:上面描绘的几何图形是平行四边形。我正在寻找的矢量 V 平行于平行四边形的左侧和右侧。深度并不是说,我在寻找垂直于顶边的向量,而是指纯 2D 游戏的假深度。因此,平行四边形被用作创造沿着 z 轴行走的感觉的手段。

我们称平行四边形的右下角为D。 如果平行四边形的长边是水平的,则可以通过以下方式找到V向量的大小:

V.magnitude =  (c.y - a.y) / sin(BAD)

或者如果您愿意:

V.magnitude = AB.magnitude * (c.y - a.y)/(b.y - a.y)

你的播放器的深度(V 的长度)从你绘图的顶线开始测量,正好是 A.y 和 C.y 之间的差值。这与平行四边形中的倾斜是分开的,因为我们只是在看深度。

示例:

float v; 

Vector2 a = new Vector2(100, 100); //The point you're measuring from
Vector2 c = new Vector2(150, 150); //Your character position

v = c.y - a.y; // This is the length of V.
//In numbers: 50 = 150 - 100 

插图:图片未按比例缩放 这适用于您平面上的任何坐标。

现在,如果您想获得 AC 的长度,则需要应用一些毕达哥拉斯,即 a² + b² = c²。在代码中的示例中:

Vector2 a = new Vector2(100, 100);
Vector2 c = new Vector2(150, 150);

float ac1 = Mathf.Sqrt(Mathf.Pow(c.x - a.x, 2) + Mathf.Pow(c.y - a.y, 2));

现在每次都要打字很痛苦,看起来很可怕。但 Unity 可以满足您的需求!有一个Vector方法called Distance

float ac2 = Vector2.Distance(a, c);

其中既return70.71068也就是AC的长度。 这是可行的,因为对于您所在区域的任何点 c,您可以绘制一个从 ac.

的直角三角形

根据评论编辑: 如果您希望 "depth" 向量与平行四边形的边平行,我们可以在平行四边形中创建一个三角形,我们计算其斜边。

由于我们希望三角形的新斜边与平行四边形平行,因此我们可以使用与您绘图中的 B 点相同的角度 θ(在我的图中用粉红色表示),我知道您知道其中的值.

我们还知道这个新三角形的相邻边(以蓝色表示)的长度,因为这是我们之前计算的高度 (c.y - a.y)。

利用这两个值,我们可以用余弦求出与平行四边形平行的三角形的斜边(以红色表示)的长度,等于向量 V。 公式是:hypotenuse = adjacent/cos(θ)

现在,如果我们要在其中输入一些数字,对于我的示例,角度 θ 为 55。它看起来像这样

float v = 50/(cos(55));

图片未缩放