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

Unity3d 从给定的点和角度找到矢量大小的最便宜的方法,unity3d,linear-algebra,Unity3d,Linear Algebra,我试图确定玩家在平面上的深度位置,它定义了2D斗殴游戏中可行走的地面。下图描述了该问题: C代表球员的当前位置。我需要找到向量V的大小。因为我对线性代数不在行,所以我能想到的一件事是:确定L1和L2的交点P,然后从AP中获取大小。然而,我觉得一定有一个更简单的方法来找到V,因为我已经知道向量应该有一个角度,由AB的向量给出 任何意见都将不胜感激,因为我期待着提高我的线性代数游戏 编辑:由于我缺乏绘画技巧,现在还不清楚:上面描绘的几何体是一个平行四边形。我要找的向量V平行于平行四边形的左右两侧。

我试图确定玩家在平面上的深度位置,它定义了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之间的差异。这与parralelogram中的倾斜分开,因为我们只是在看深度

例如:

float v;
向量2a=新向量2(100100)//你测量的起点
向量2c=新向量2(150150)//你的角色位置
v=c.y-a.y;//这是V的长度。
//数字:50=150-100
插图:图像未缩放 这适用于你所在平面中的任何协调

现在,如果你想得到AC的长度,你需要使用毕达哥拉斯,即a²+b²=c²。在示例中,这意味着在代码中:

vector2a=新的Vector2(100100);
向量2c=新向量2(150150);
float ac1=Mathf.Sqrt(Mathf.Pow(c.x-a.x,2)+Mathf.Pow(c.y-a.y,2));
现在,每次打字都会让人感到很痛苦,而且看起来很可怕。但团结是你的掩护!有一种向量方法

float ac2=Vector2.距离(a,c);
两者都返回
70.71068
,这是AC的长度。 这是因为对于您所在区域的任何点
c
,您都可以从
a
c
绘制一个直角三角形

根据评论编辑: 如果你想让你的“深度”向量与平行四边形的边平行,我们可以在平行四边形中创建一个三角形,计算斜边

因为我们希望三角形的新斜边平行于平行四边形,所以我们可以使用与点B相同的角度θ(在我的图中用粉色表示),我知道你知道它的值

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

使用这两个值,我们可以使用余弦来找到三角形的斜边长度(用红色表示),它等于向量V,与平行四边形平行。 公式是:
斜边=相邻/cos(θ)

现在如果我们在这里面放一些数字,比如我的例子,角度θ取55。看起来是这样的

float v=50/(cos(55))

图像不可缩放


谢谢您的回复。如何处理非水平边的情况?他要求的向量不是
c.y-a.y
。他画的V向量与AB段平行,而你的不是。@kefren他确实画了平行的向量,但是他要求的只是深度,向量的原点从顶线开始。就深度而言,这将是一条直线。事实上,问题并不清楚。下面还写着“找到V,因为我已经知道向量应该有什么角度,由AB的向量给出”,这让我觉得他实际上想要他画的向量的大小。@kefren同意。我更新了答案,也反映了另一种计算长度的方法,如果长度与边平行的话。当我谈论“深度”时,我指的是一个假想的z轴的深度。这应该用于在2D游戏中伪造深度。我实际上是在寻找V的大小,所以你答案的第二部分有助于解决我的问题。非常感谢。:)你的飞机是平行四边形还是普通的四边形?是的。地面将始终定义为平行四边形。