Este grupo de redactores ha estado mucho tiempo buscando para darle resolución a tus búsquedas, te dejamos la solución de modo que nuestro objetivo es que resulte de mucha ayuda.
Solución:
Di si tienes 4 vértices a, b, c, d (vectores 3-D).
Ahora, el problema se reduce a escribir código que resuelva el producto cruzado y el producto escalar de los vectores. Si es de Python, puede usar NumPy o puede escribir código por su cuenta.
El enlace de Wikipedia definitivamente debería ayudarlo. ENLACE
Una forma de calcular este volumen es la siguiente:
1 [ax bx cx dx]
V = --- det [ay by cy dy]
6 [az bz cz dz]
[ 1 1 1 1]
Esto implica la evaluación de un determinante de 4 × 4. Se generaliza muy bien a simples de dimensiones superiores, siendo el 6 un caso especial de ¡norte!, el factorial de la dimensión. El volumen resultante será orientado, es decir, puede ser negativo según el orden de los puntos. Si no quiere eso, tome el valor absoluto del resultado.
Si tiene una biblioteca matemática a mano, la formulación anterior podría estar entre las más fáciles de escribir, y el software puede tomarla desde allí. Si no, puede simplificar las cosas primero restando el D coordenadas de a mediante C. Esto no cambiará el volumen, pero convertirá la columna más a la derecha en (0, 0, 0, 1)
. Como resultado, puede calcular el valor de la matriz simplemente como el determinante de la submatriz superior izquierda 3 × 3. Y usando la ecuación
det (a, b, c) = a · (b × c)
terminas con la fórmula de la respuesta de Surya.
En caso de que no tenga coordenadas para los puntos, sino solo distancias entre ellos, mire la Fórmula de Tartaglia, que es esencialmente una versión cuadrada de la anterior, aunque no es tan sencilla como parecería a primera vista.
El ejemplo de Ivan Seidel, en Python (la respuesta es 1.3333 …)
def determinant_3x3(m):
return (m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) -
m[1][0] * (m[0][1] * m[2][2] - m[0][2] * m[2][1]) +
m[2][0] * (m[0][1] * m[1][2] - m[0][2] * m[1][1]))
def subtract(a, b):
return (a[0] - b[0],
a[1] - b[1],
a[2] - b[2])
def tetrahedron_calc_volume(a, b, c, d):
return (abs(determinant_3x3((subtract(a, b),
subtract(b, c),
subtract(c, d),
))) / 6.0)
a = [0.0, 0.0, 0.0]
d = [2.0, 0.0, 0.0]
c = [0.0, 2.0, 0.0]
b = [0.0, 0.0, 2.0]
print(tetrahedron_calc_volume(a, b, c, d))