我正在尝试确定玩家在平面上的深度位置,该位置定义了2D格斗游戏中的可行走地面。下图描述了该问题:
C代表玩家当前位置。我需要找到向量V的大小。由于我不擅长线性代数,所以我想到的一件事是:确定L1和L2的交点P,然后从AP中获取大小。但是,我觉得必须找到一种更简单的方法来找到V,因为我已经知道矢量应该具有的角度,该角度由AB的矢量给出。
任何输入都会受到赞赏,因为我期待着加强线性代数游戏。
编辑:由于我缺乏绘图能力,目前尚不清楚:上面描述的几何形状是平行四边形。我正在寻找的向量V平行于平行四边形的左侧和右侧。深度并不意味着我在寻找垂直于顶面的向量,而是指纯2D游戏的虚假深度。因此,平行四边形可用作创造沿z轴行走的感觉的方法。
答案 0 :(得分:1)
我们将其称为平行四边形D的右下顶点。 如果平行四边形的长边是水平的,则可以通过以下方法找到V向量的大小:
V.magnitude = (c.y - a.y) / sin(BAD)
或者,如果您愿意:
V.magnitude = AB.magnitude * (c.y - a.y)/(b.y - a.y)
答案 1 :(得分:1)
从图形顶行开始测量的播放器深度(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覆盖了您!有一个向量方法called Distance
float ac2 = Vector2.Distance(a, c);
两者都返回70.71068
,即AC的长度。
之所以起作用,是因为对于您所在区域的任何点c
,您都可以从a
到c
绘制一个直角三角形。
根据评论编辑: 如果您希望“深度”向量与平行四边形的边平行,我们可以在平行四边形中创建一个三角形,然后计算斜边。
由于我们希望三角形的新斜边平行于平行四边形,因此我们可以使用与图形中B点相同的角度θ(我的粉红色表示),我知道您知道其中的值。 / p>
我们也知道这个新三角形的相邻边(用蓝色表示)的长度,因为这是我们之前计算的高度(c.y-a.y)。
使用这两个值,我们可以使用余弦找到与平行四边形平行的三角形的斜边(用红色表示)的长度,该长度等于矢量V。
其公式为:hypotenuse = adjacent/cos(θ)
现在,如果我们要在其中输入一些数字,对于我的示例,我取55度作为角度θ。看起来像这样
float v = 50/(cos(55));
图像无法缩放