Open In App

How to Find the Volume of a Tetrahedron Using Determinants in Java?

Last Updated : 07 Aug, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given the vertices of a tetrahedron. The task is to determine the volume of that tetrahedron using determinants.

Approach:

1. Given the four vertices of the tetrahedron (x1, y1, z1), (x2, y2, z2), (x3, y3, z3), and (x4, y4, z4). Using these vertices create a (4 × 4) matrix in which the coordinate triplets form the columns of the matrix, with an extra row with each value as 1 appended at the bottom.

x1  x2  x3  x4
y1  y2  y3  y4
z1  z2  z3  z4
1   1   1    1

2. For a 4 × 4 matrix which has a row of 1’s at the bottom, we can use the given simplification formula to reduce into a (3 × 3) matrix.

x1-x4   x2-x4   x3-x4
y1-y4   y2-y4   y3-y4
z1-z4   z2-z4   z3-z4

3. Volume of the tetrahedron is equal to 1/6 times the absolute value of the above calculated determinant of the matrix

Examples:

Input: x1=9, x2=3, x3=7, x4=9, y1=5, y2=0, y3=4, y4=6, z1=1, z2=0, z3=3, z4=0
Output: Volume of the Tetrahedron Using Determinants: 3.0

Input: x1=6, x2=8, x3=5, x4=9, y1=7, y2=1, y3=7, y4=1, z1=6, z2=9, z3=2, z4=6
Output: Volume of the Tetrahedron Using Determinants: 7.0

Java




// Java program to find the volume of a
// tetrahedron using determinants
 
import java.io.*;
 
class VolumeOfADeterminant {
    public static double determinant(double m[][], int n)
    {
        double dt = 0;
 
        // if the matrix has only
        // one element
        if (n == 1) {
            dt = m[0][0];
        }
 
        // if the matrix has 4 elements
        // find determinant
        else if (n == 2) {
            dt = m[0][0] * m[1][1] - m[1][0] * m[0][1];
        }
 
        else {
            dt = 0;
            for (int j1 = 0; j1 < n; j1++) {
 
                double[][] w = new double[n - 1][];
                for (int k = 0; k < (n - 1); k++) {
                    w[k] = new double[n - 1];
                }
                for (int i = 1; i < n; i++) {
                    int j2 = 0;
                    for (int j = 0; j < n; j++) {
                        if (j == j1)
                            continue;
                        w[i - 1][j2] = m[i][j];
                        j2++;
                    }
                }
                dt += Math.pow(-1.0, 1.0 + j1 + 1.0)
                      * m[0][j1] * determinant(w, n - 1);
            }
        }
        return dt;
    }
 
    public static void main(String args[])
    {
        // Input the vertices
        int x1 = 5, x2 = 8, x3 = 1, x4 = 9, y1 = 5, y2 = 0,
            y3 = 7, y4 = 8, z1 = 8, z2 = 3, z3 = 4, z4 = 1;
 
        // create a 4 * 4 matrix
        double[][] m = new double[4][4];
 
        // Create a matrix of that vertices
        m[0][0] = x1;
        m[0][1] = x2;
        m[0][2] = x3;
        m[0][3] = x4;
        m[1][0] = y1;
        m[1][1] = y2;
        m[1][2] = y3;
        m[1][3] = y4;
        m[2][0] = z1;
        m[2][1] = z2;
        m[2][2] = z3;
        m[2][3] = z4;
        m[3][0] = 1;
        m[3][1] = 1;
        m[3][2] = 1;
        m[3][3] = 1;
 
        // Converting the 4x4 matrix into 3x3
        double[][] m1 = new double[3][3];
        m1[0][0] = x1 - x4;
        m1[0][1] = x2 - x4;
        m1[0][2] = x3 - x4;
        m1[1][0] = y1 - y4;
        m1[1][1] = y2 - y4;
        m1[1][2] = y3 - y4;
        m1[2][0] = z1 - z4;
        m1[2][1] = z2 - z4;
        m1[2][2] = z3 - z4;
 
        // find (determinant/6)
        double deter = determinant(m1, 3) / 6;
 
        // if determinant is negative
        if (deter < 0)
            System.out.println(
                "Volume of the Tetrahedron Using Determinants: "
                + (deter * -1));
        else
            System.out.println(
                "Volume of the Tetrahedron Using Determinants: "
                + (deter * -1));
    }
}


Output

Volume of the Tetrahedron Using Determinants: 52.333333333333336

Time Complexity: O(N3)
Auxiliary Space: O(N)



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads