struct vector3 { float x,y,z; }; vector3 Vec3_Cross(vector3 v1, vector3 v2) { vector3 t; t.x = v1.y * v2.z - v1.z * v2.y; t.y = v1.z * v2.x - v1.x * v2.z; t.z = v1.x * v2.y - v1.y * v2.x; return t; } int main() { vector3 v1 = { 1.0f, 0.0f, 0.0f }; vector3 v2 = { 0.0f, 1.0f, 0.0f }; vector3 ret = Vec3_Cross(v1, v2); return 0; }
Что бы проверить суждения, и расчет выше, давайте возьмем два вектора- один направлен вдоль оси X, другой направлен вдоль оси Y, и по идее- третий вектор будет направлен по оси Z так как этот вектор перпендикулярен двоим исходным.
Берем два вектора направленых вдоль осей X и Y:
vector3 v1 = { 1.0f, 0.0f, 0.0f }; vector3 v2 = { 0.0f, 1.0f, 0.0f };
Результат векторного произведения векторов будет третий вектор направленный вдоль оси Z:
vector3 ret = {0.0f, 0.0f, 1.0f};