133 lines
3.7 KiB
C++
133 lines
3.7 KiB
C++
/*This is a C++ Program to find the volume of tetrahedron.
|
||
Call the four vertices of the tetrahedron (a, b, c), (d, e, f), (g, h, i), and (p, q, r). Now create a 4-by-4 matrix in which the coordinate triples form the colums of the matrix, with a row of 1’s appended at the bottom:
|
||
a d g p
|
||
b e h q
|
||
c f i r
|
||
1 1 1 1
|
||
The volume of the tetrahedron is 1/6 times the absolute value of the matrix determinant. For any 4-by-4 matrix that has a row of 1’s along the bottom, you can compute the determinant with a simplification formula that reduces the problem to a 3-by-3 matrix
|
||
a-p d-p g-p
|
||
b-q e-q h-q
|
||
c-r f-r i-r*/
|
||
|
||
#include<stdio.h>
|
||
#include<stdlib.h>
|
||
#include<iostream>
|
||
#include<math.h>
|
||
|
||
using namespace std;
|
||
|
||
double det(int n, double mat[3][3])
|
||
{
|
||
double submat[3][3];
|
||
float d;
|
||
for (int c = 0; c < n; c++)
|
||
{
|
||
int subi = 0; //submatrix's i value
|
||
for (int i = 1; i < n; i++)
|
||
{
|
||
int subj = 0;
|
||
for (int j = 0; j < n; j++)
|
||
{
|
||
if (j == c)
|
||
continue;
|
||
submat[subi][subj] = mat[i][j];
|
||
subj++;
|
||
}
|
||
subi++;
|
||
}
|
||
d = d + (pow(-1, c) * mat[0][c] * det(n - 1, submat));
|
||
}
|
||
return d;
|
||
}
|
||
|
||
int main(int argc, char **argv)
|
||
{
|
||
cout << "Enter the points of the triangle:\n";
|
||
int x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4;
|
||
cin >> x1;
|
||
cin >> x2;
|
||
cin >> x3;
|
||
cin >> x4;
|
||
cin >> y1;
|
||
cin >> y2;
|
||
cin >> y3;
|
||
cin >> y4;
|
||
cin >> z1;
|
||
cin >> z2;
|
||
cin >> z3;
|
||
cin >> z4;
|
||
double mat[4][4];
|
||
mat[0][0] = x1;
|
||
mat[0][1] = x2;
|
||
mat[0][2] = x3;
|
||
mat[0][3] = x4;
|
||
mat[1][0] = y1;
|
||
mat[1][1] = y2;
|
||
mat[1][2] = y3;
|
||
mat[1][3] = y4;
|
||
mat[2][0] = z1;
|
||
mat[2][1] = z2;
|
||
mat[2][2] = z3;
|
||
mat[2][3] = z4;
|
||
mat[3][0] = 1;
|
||
mat[3][1] = 1;
|
||
mat[3][2] = 1;
|
||
mat[3][3] = 1;
|
||
cout << "\nMatrix formed by the points: \n";
|
||
for (int i = 0; i < 4; i++)
|
||
{
|
||
for (int j = 0; j < 4; j++)
|
||
{
|
||
cout << mat[i][j] << " ";
|
||
}
|
||
cout << endl;
|
||
}
|
||
double matrix[3][3];
|
||
matrix[0][0] = x1 - x4;
|
||
matrix[0][1] = x2 - x4;
|
||
matrix[0][2] = x3 - x4;
|
||
matrix[1][0] = y1 - y4;
|
||
matrix[1][1] = y2 - y4;
|
||
matrix[1][2] = y3 - y4;
|
||
matrix[2][0] = z1 - z4;
|
||
matrix[2][1] = z2 - z4;
|
||
matrix[2][2] = z3 - z4;
|
||
for (int i = 0; i < 3; i++)
|
||
{
|
||
for (int j = 0; j < 3; j++)
|
||
{
|
||
cout << matrix[i][j] << " ";
|
||
}
|
||
cout << endl;
|
||
}
|
||
float determinant = det(3, matrix) / 6;
|
||
if (determinant < 0)
|
||
cout << "The Area of the tetrahedron formed by (" << x1 << "," << y1
|
||
<< "," << z1 << "), (" << x2 << "," << y2 << "," << z2
|
||
<< "), (" << x3 << "," << y3 << "," << z3 << "), (" << x4 << ","
|
||
<< y4 << "," << z4 << ") = " << (determinant * -1);
|
||
else
|
||
cout << "The Area of the tetrahedron formed by (" << x1 << "," << y1
|
||
<< "," << z1 << "), (" << x2 << "," << y2 << "," << z2
|
||
<< "), (" << x3 << "," << y3 << "," << z3 << "), (" << x4 << ","
|
||
<< y4 << "," << z4 << ") = " << determinant;
|
||
return 0;
|
||
}
|
||
|
||
/*
|
||
|
||
Enter the points of the triangle:
|
||
0 9 6 0
|
||
4 2 1 1
|
||
3 4 7 5
|
||
|
||
Matrix formed by the points:
|
||
0 9 6 0
|
||
4 2 1 1
|
||
3 4 7 5
|
||
1 1 1 1
|
||
|
||
0 9 6
|
||
3 1 0
|
||
-2 -1 2
|
||
The Area of the tetrahedron formed by (0,4,3), (9,2,4), (6,1,7), (0,1,5) = 10.0
|