Код:
#include<iostream>
#include<fstream>
#include<vector>
#include<stack>
#include<stdio.h>
#include<math.h>
using namespace std;
void uravneniya(int i, int j, int k, int l, double **Koord, double Mur[4][4])
{
//Плоскость i - j - k
Mur[0][0] = Koord[1][j]*Koord[2][k] - Koord[1][j]*Koord[2][i] - Koord[1][i]*Koord[2][k] - Koord[1][k]*Koord[2][j] + Koord[1][k]*Koord[2][i] + Koord[1][i]*Koord[2][j];
Mur[0][1] = Koord[0][k]*Koord[2][j] - Koord[0][k]*Koord[2][i] - Koord[0][i]*Koord[2][j] + Koord[0][i]*Koord[2][k] - Koord[0][j]*Koord[2][k] + Koord[0][j]*Koord[2][i];
Mur[0][2] = Koord[0][j]*Koord[1][k] - Koord[0][j]*Koord[1][i] - Koord[0][i]*Koord[1][k] - Koord[0][k]*Koord[1][j] + Koord[0][k]*Koord[1][i] + Koord[0][i]*Koord[1][j];
Mur[0][3] = -Koord[0][i]*Koord[1][j]*Koord[2][k] - Koord[0][k]*Koord[1][i]*Koord[2][j] - Koord[0][j]*Koord[1][k]*Koord[2][i] + Koord[0][k]*Koord[1][j]*Koord[2][i] + Koord[0][i]*Koord[1][k]*Koord[2][j] + Koord[0][j]*Koord[1][i]*Koord[2][k];
cout<<Mur[0][0]<<" "<<Mur[0][1]<<" "<<Mur[0][2]<<" "<<Mur[0][3]<<endl;
//Плоскость i - j - l
Mur[1][0] = Koord[1][j]*Koord[2][l] - Koord[1][j]*Koord[2][i] - Koord[1][i]*Koord[2][l] - Koord[1][l]*Koord[2][j] + Koord[1][l]*Koord[2][i] + Koord[1][i]*Koord[2][j];
Mur[1][1] = Koord[0][l]*Koord[2][j] - Koord[0][l]*Koord[2][i] - Koord[0][i]*Koord[2][j] + Koord[0][i]*Koord[2][l] - Koord[0][j]*Koord[2][l] + Koord[0][j]*Koord[2][i];
Mur[1][2] = Koord[0][j]*Koord[1][l] - Koord[0][j]*Koord[1][i] - Koord[0][i]*Koord[1][l] - Koord[0][l]*Koord[1][j] + Koord[0][l]*Koord[1][i] + Koord[0][i]*Koord[1][j];
Mur[1][3] = -Koord[0][i]*Koord[1][j]*Koord[2][l] - Koord[0][l]*Koord[1][i]*Koord[2][j] - Koord[0][j]*Koord[1][l]*Koord[2][i] + Koord[0][l]*Koord[1][j]*Koord[2][i] + Koord[0][i]*Koord[1][l]*Koord[2][j] + Koord[0][j]*Koord[1][i]*Koord[2][l];
cout<<Mur[1][0]<<" "<<Mur[1][1]<<" "<<Mur[1][2]<<" "<<Mur[1][3]<<endl;
//Плоскость i - k - l
Mur[2][0] = Koord[1][k]*Koord[2][l] - Koord[1][k]*Koord[2][i] - Koord[1][i]*Koord[2][l] - Koord[1][l]*Koord[2][k] + Koord[1][l]*Koord[2][i] + Koord[1][i]*Koord[2][k];
Mur[2][1] = Koord[0][l]*Koord[2][k] - Koord[0][l]*Koord[2][i] - Koord[0][i]*Koord[2][k] + Koord[0][i]*Koord[2][l] - Koord[0][k]*Koord[2][l] + Koord[0][k]*Koord[2][i];
Mur[2][2] = Koord[0][k]*Koord[1][l] - Koord[0][k]*Koord[1][i] - Koord[0][i]*Koord[1][l] - Koord[0][l]*Koord[1][k] + Koord[0][l]*Koord[1][i] + Koord[0][i]*Koord[1][k];
Mur[2][3] = -Koord[0][i]*Koord[1][k]*Koord[2][l] - Koord[0][l]*Koord[1][i]*Koord[2][k] - Koord[0][k]*Koord[1][l]*Koord[2][i] + Koord[0][l]*Koord[1][k]*Koord[2][i] + Koord[0][i]*Koord[1][l]*Koord[2][k] + Koord[0][k]*Koord[1][i]*Koord[2][l];
cout<<Mur[2][0]<<" "<<Mur[2][1]<<" "<<Mur[2][2]<<" "<<Mur[2][3]<<endl;
//Плоскость k - j - l
Mur[3][0] = Koord[1][j]*Koord[2][l] - Koord[1][j]*Koord[2][k] - Koord[1][k]*Koord[2][l] - Koord[1][l]*Koord[2][j] + Koord[1][l]*Koord[2][k] + Koord[1][k]*Koord[2][j];
Mur[3][1] = Koord[0][l]*Koord[2][j] - Koord[0][l]*Koord[2][k] - Koord[0][k]*Koord[2][j] + Koord[0][k]*Koord[2][l] - Koord[0][j]*Koord[2][l] + Koord[0][j]*Koord[2][k];
Mur[3][2] = Koord[0][j]*Koord[1][l] - Koord[0][j]*Koord[1][k] - Koord[0][k]*Koord[1][l] - Koord[0][l]*Koord[1][j] + Koord[0][l]*Koord[1][k] + Koord[0][k]*Koord[1][j];
Mur[3][3] = -Koord[0][k]*Koord[1][j]*Koord[2][l] - Koord[0][l]*Koord[1][k]*Koord[2][j] - Koord[0][j]*Koord[1][l]*Koord[2][k] + Koord[0][l]*Koord[1][j]*Koord[2][k] + Koord[0][k]*Koord[1][l]*Koord[2][j] + Koord[0][j]*Koord[1][k]*Koord[2][l];
cout<<Mur[3][0]<<" "<<Mur[3][1]<<" "<<Mur[3][2]<<" "<<Mur[3][3]<<endl;
return ;
}
void proverka(int i, int j, int k, int l, int n, int z, double **Koord, double Mur[4][4], bool **Mass)
{
int m;
double a, b, c, d, e, f, g, h;
a = Mur[0][0]*Koord[0][l] + Mur[0][1]*Koord[1][l] + Mur[0][2]*Koord[2][l] + Mur[0][3];
b = Mur[1][0]*Koord[0][k] + Mur[1][1]*Koord[1][k] + Mur[1][2]*Koord[2][k] + Mur[1][3];
c = Mur[2][0]*Koord[0][j] + Mur[2][1]*Koord[1][j] + Mur[2][2]*Koord[2][j] + Mur[2][3];
d = Mur[3][0]*Koord[0][i] + Mur[3][1]*Koord[1][i] + Mur[3][2]*Koord[2][i] + Mur[3][3];
for(m = 0; m < n/3; m++)
{
e = Mur[0][0]*Koord[0][m] + Mur[0][1]*Koord[1][m] + Mur[0][2]*Koord[2][m] + Mur[0][3];
f = Mur[1][0]*Koord[0][m] + Mur[1][1]*Koord[1][m] + Mur[1][2]*Koord[2][m] + Mur[1][3];
g = Mur[2][0]*Koord[0][m] + Mur[2][1]*Koord[1][m] + Mur[2][2]*Koord[2][m] + Mur[2][3];
h = Mur[3][0]*Koord[0][m] + Mur[3][1]*Koord[1][m] + Mur[3][2]*Koord[2][m] + Mur[3][3];
if(
(a>0 && e>0 || a<0 && e<0) &&
(b>0 && f>0 || b<0 && f<0) &&
(c>0 && g>0 || c<0 && g<0) &&
(d>0 && h>0 || d<0 && h<0)
)
{
Mass[z][m] = true;
}
else
{
Mass[z][m] = false;
}
}
return;
}