 Open in App
Not now

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

• Last Updated : 07 Aug, 2022

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)

My Personal Notes arrow_drop_up