【发布时间】:2019-08-23 04:39:13
【问题描述】:
我有一个包含 3 个分量 (X,Y,Z) 的向量,我想找到一个与给定向量正交的向量。由于与任何向量正交的向量都是无限的,所以我只需要一个随机的。
我尝试使用带有点积公式的方程,因为两个正交向量之间的点积始终为 0,并且我设法编写了一些代码,该代码仅在给定向量轴对齐时才有效,但是这可能是因为向量的随机分量是 X 和 Y。我真的无法理解这一点。
我在 Unity3D 引擎上编写代码以便能够轻松地对其进行可视化:
Vector3 GenerateOrthogonal(Vector3 normal)
{
float x = Random.Range(1f, -1f);
float y = Random.Range(1f, -1f);
float total = normal.x * x + normal.y * y;
float z = -total / -normal.z;
return new Vector3(x, y, z).normalized;
}
【问题讨论】:
-
stackoverflow.com/questions/11132681/… 让您找到正交向量 - 只需找到 2 并使用它们的随机线性组合。
-
考虑正交 a 平面垂直于向量上的点。所以首先你需要原始向量上的一个点。所以第一步是得到一个随机的 X(从零到无穷大),然后在原始向量上求解 Y 和 Z。然后你可以得到一个与第一个向量正交的第二个向量。第二个向量实际上是平面上的任何向量,它在第一个向量上的一点垂直于第一个向量。所以你真的在处理无穷大平方。首先你有一个无穷大原始向量上的点数。然后在垂直于第一个向量的平面上的无限数量的向量。
标签: c# unity3d vector trigonometry orthogonal