У меня есть вектор с 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;
}