16. Producto triple y volumen orientado

Tres vectores pueden definir un volumen; el producto triple mide su tamaño y agrega un signo que informa la orientación espacial.

16.1 Combinar productos vectoriales y escalares

El producto triple escalar, también llamado producto mixto, combina tres vectores mediante un producto vectorial y uno escalar:

[a, b, c] = a · (b × c)

El resultado es un número. Su valor absoluto representa un volumen y su signo registra la orientación del orden elegido para los vectores.

Los paréntesis importan: primero b × c produce un vector; después se calcula su producto escalar con a.

16.2 Interpretación geométrica

Los vectores b y c forman la base de un paralelepípedo. El módulo |b × c| es el área de esa base. El producto escalar con a incorpora la altura firmada perpendicular a la base.

volumen = |a · (b × c)|

El valor absoluto entrega el volumen geométrico, que nunca es negativo. El resultado sin valor absoluto es el volumen orientado.

16.3 Cálculo por componentes

Primero calculamos b × c y luego multiplicamos escalarmente por a:

function productoTriple(a, b, c) {
  const cruz = {
    x: b.y * c.z - b.z * c.y,
    y: b.z * c.x - b.x * c.z,
    z: b.x * c.y - b.y * c.x
  };
  return a.x * cruz.x + a.y * cruz.y + a.z * cruz.z;
}

console.log(productoTriple(
  { x: 1, y: 0, z: 0 },
  { x: 0, y: 1, z: 0 },
  { x: 0, y: 0, z: 1 }
));

16.4 Forma de determinante

El producto triple coincide con el determinante de la matriz que tiene los vectores como filas o columnas en el mismo orden:

ax(bycz − bzcy) − ay(bxcz − bzcx) + az(bxcy − bycx)

Esta expresión facilita una implementación directa, pero la forma vectorial explica mejor la geometría.

16.5 Signo y orientación

En un sistema de mano derecha, [i, j, k] = 1. Intercambiar dos vectores cambia el signo:

[a, b, c] = −[b, a, c]

Un resultado positivo indica que la terna tiene la misma orientación que la base de referencia; uno negativo indica orientación opuesta.

16.6 Permutaciones cíclicas

Rotar cíclicamente los tres vectores conserva el producto:

a·(b×c) = b·(c×a) = c·(a×b)

En cambio, intercambiar solamente dos posiciones invierte el signo. Estas relaciones son útiles para comprobar cálculos.

const triple = (a, b, c) =>
  a.x * (b.y*c.z - b.z*c.y)
  - a.y * (b.x*c.z - b.z*c.x)
  + a.z * (b.x*c.y - b.y*c.x);

const a = { x: 2, y: 1, z: 0 };
const b = { x: -1, y: 3, z: 2 };
const c = { x: 0, y: 2, z: 4 };
console.log(triple(a,b,c), triple(b,c,a), triple(b,a,c));

16.7 Coplanaridad

Tres vectores son coplanarios si el volumen que generan es cero:

a·(b×c) = 0

Esto sucede si alguno es nulo, si dos son paralelos o si uno puede escribirse como combinación lineal de los otros dos. El producto triple detecta dependencia lineal en 3D.

16.8 Volumen de tetraedros

Si tres vectores parten de un mismo vértice y llegan a los otros tres vértices de un tetraedro, su volumen es la sexta parte del paralelepípedo:

Vtetraedro = |a·(b×c)| / 6

El factor seis aparece porque el paralelepípedo puede dividirse en seis tetraedros de igual volumen.

16.9 Volumen definido por cuatro puntos

Dados los puntos A, B, C y D, construimos tres vectores desde el mismo origen A: B − A, C − A y D − A. Entonces:

V = |(B−A)·[(C−A)×(D−A)]| / 6
function volumenTetraedro(a, b, c, d) {
  const resta = (p, q) => ({ x: p.x-q.x, y: p.y-q.y, z: p.z-q.z });
  const u = resta(b,a), v = resta(c,a), w = resta(d,a);
  const triple = u.x*(v.y*w.z-v.z*w.y)
               - u.y*(v.x*w.z-v.z*w.x)
               + u.z*(v.x*w.y-v.y*w.x);
  return Math.abs(triple) / 6;
}

console.log(volumenTetraedro(
  {x:0,y:0,z:0}, {x:1,y:0,z:0}, {x:0,y:1,z:0}, {x:0,y:0,z:1}
));

16.10 Unidades y escalado

Si los tres vectores son longitudes en metros, el producto triple se expresa en m³. Al multiplicar uno de los vectores por k, el volumen orientado se multiplica por k. Si se escalan los tres por k, el volumen se multiplica por k³.

Un factor negativo también invierte la orientación, además de escalar el valor absoluto.

16.11 Producto triple vectorial

Existe otra operación con tres vectores cuyo resultado es vectorial:

a × (b × c)

Se puede reescribir mediante la identidad BAC−CAB:

a × (b × c) = b(a·c) − c(a·b)

El resultado pertenece al plano formado por b y c. No debe confundirse con el producto triple escalar.

16.12 El producto vectorial no es asociativo

En general:

a × (b × c) ≠ (a × b) × c

Por eso los paréntesis nunca deben omitirse en un producto triple vectorial. Ambas expresiones pueden apuntar en direcciones diferentes.

const cruz = (a,b) => ({
  x:a.y*b.z-a.z*b.y, y:a.z*b.x-a.x*b.z, z:a.x*b.y-a.y*b.x
});
const a={x:1,y:2,z:0}, b={x:0,y:1,z:3}, c={x:2,y:0,z:1};
console.log("a × (b × c)", cruz(a, cruz(b,c)));
console.log("(a × b) × c", cruz(cruz(a,b), c));

16.13 Laboratorio de volumen orientado

Modificá el vector c mientras a y b forman la base. Rotá la vista arrastrando. El signo cambia cuando c atraviesa el plano de la base.

Producto triple
Volumen
Área de base |a×b|
Altura firmada
Orientación

Los vectores generan un volumen positivo.

16.14 Precisión y degeneración

Con datos de punto flotante, un volumen teóricamente nulo puede resultar muy pequeño. Conviene compararlo con una tolerancia relativa a |a||b||c|.

function sonCoplanarios(a, b, c, epsilon = 1e-10) {
  const triple = a.x*(b.y*c.z-b.z*c.y)
               - a.y*(b.x*c.z-b.z*c.x)
               + a.z*(b.x*c.y-b.y*c.x);
  const escala = Math.hypot(a.x,a.y,a.z)
               * Math.hypot(b.x,b.y,b.z)
               * Math.hypot(c.x,c.y,c.z);
  return escala === 0 || Math.abs(triple) <= epsilon * escala;
}

console.log(sonCoplanarios({x:1,y:0,z:0},{x:0,y:1,z:0},{x:2,y:3,z:0}));

16.15 Errores frecuentes

  • Confundir producto triple escalar con producto triple vectorial.
  • Omitir paréntesis en productos vectoriales anidados.
  • Tomar el valor absoluto y perder la orientación cuando el signo importa.
  • Informar un volumen geométrico negativo.
  • Creer que intercambiar dos vectores conserva el signo.
  • Usar tres vectores con orígenes distintos para un volumen sin trasladarlos.
  • Exigir cero exacto para detectar coplanaridad numérica.

16.16 Ejercicio integrador

Sean a = (2, 0, 1) m, b = (1, 3, 0) m y c = (0, 2, 4) m.

  1. Calculá b × c.
  2. Calculá a·(b×c).
  3. Obtené el volumen del paralelepípedo y del tetraedro asociado.
  4. Determiná la orientación.
  5. Explicá qué sucede al intercambiar b y c.
Ver solución y código

b × c = (12, −4, 2) m². El producto triple es 2·12 + 0·(−4) + 1·2 = 26 m³. El paralelepípedo tiene volumen 26 m³ y el tetraedro 26/6 ≈ 4,33 m³. La orientación es positiva. Intercambiar b y c produce −26, pero conserva el volumen geométrico.

const a={x:2,y:0,z:1}, b={x:1,y:3,z:0}, c={x:0,y:2,z:4};
const cruz={x:b.y*c.z-b.z*c.y,y:b.z*c.x-b.x*c.z,z:b.x*c.y-b.y*c.x};
const triple=a.x*cruz.x+a.y*cruz.y+a.z*cruz.z;
console.log({ cruz, triple, volumen:Math.abs(triple), tetraedro:Math.abs(triple)/6 });

16.17 Ideas para recordar

  • El producto triple escalar es a·(b×c).
  • Su valor absoluto es el volumen de un paralelepípedo.
  • Su signo informa la orientación de la terna.
  • Las permutaciones cíclicas conservan el resultado; intercambiar dos vectores invierte el signo.
  • Un resultado nulo indica coplanaridad o degeneración.
  • El volumen de un tetraedro asociado es un sexto.
  • El producto triple vectorial produce un vector y no es asociativo.

En el próximo tema estudiaremos coordenadas polares y su conversión con coordenadas cartesianas.