Векторное произведение векторов (cross product)


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};