Курсова крок 2
Тепер я пробую виділити тільки точки поверхні.
На картинці знизу ніби виводяться точки поверхні, але один з торів чомусь дірявий. На інших фігурах вроді працює, і алгоритм ніби правильний. Тому поки що нічого чіпати не буду. Принаймі поки не придумаю, як їх групувати в трикутники.
Код виділення точок поверхні:
void genhull()
{
vertexes.clear();
for(int i=0;i<Nsize;i++)
for(int j=0;j<Nsize;j++)
for(int k=0;k<body[i][j].size();k++)
{
vertexes[Vertex(i,j,body[i][j][k].a)]=1;
vertexes[Vertex(i,j,body[i][j][k].b)]=1;
for(int h=body[i][j][k].a+1;h<body[i][j][k].b;h++)
{
if(!(xi(i+1,j,h)&&xi(i-1,j,h)&&xi(i,j+1,h)&&xi(i,j-1,h)))
vertexes[Vertex(i,j,h)]=1;
}
}
}
Два тори зроблені за допомогою функцій:
bool thorus(double x,double y,double z)
{
double l=sqrt(x*x+y*y);
return (l<(thorus_R+thorus_r))&&(l>(thorus_R-thorus_r))&&
((l-thorus_R)*(l-thorus_R)+z*z<thorus_r*thorus_r);
}
bool thoruses(double x,double y, double z)
{
return thorus(x-thorus_R,y,z)||thorus(x,z,y);
}
Доповнення
Пошук точок оболонки таки має глюки, що видно з зображення паралелепіпеда вгорі.




