bool voxelAppartientCylindre(Point origine, Vector vecteur,double rayon, Voxel v){ Point limite(origine.getX()+vecteur.getX(), origine.getY()+vecteur.getY(),origine.getZ()+vecteur.getZ()); int distancePointProjete; int distanceOrigineProjete; for( int i = 0; i<8; i++ ){ Point projete(v.getSommet(i).projectOnLine(origine,limite)); distancePointProjete = sqrt( pow(v.getSommet(i).getX()-projete.getX(),2) + pow(v.getSommet(i).getY()-projete.getY(),2) + pow(v.getSommet(i).getZ()-projete.getZ(),2) ); distanceOrigineProjete = sqrt( pow(origine.getX()-projete.getX(),2) + pow(origine.getY()-projete.getY(),2) + pow(origine.getZ()-projete.getZ(),2) ); if( distancePointProjete > rayon || projete.getY() < origine.getY() || projete.getY() > limite.getY() ){ return false; } } return true; }
bool voxelHorsSphere(Voxel voxel, Point centreSphere, double rayonSphere){ for( int i = 0; i<8; i++ ){ if( distance(centreSphere, voxel.getSommet(i)) < rayonSphere ){ return false; } } return true; }
bool voxelHorsCylindre(Point origine, Vector vecteur,double rayon, Voxel v){ Point limite(origine.getX()+vecteur.getX(), origine.getY()+vecteur.getY(),origine.getZ()+vecteur.getZ()); int distancePointProjete; for( int i = 0; i<8; i++ ){ Point projete(v.getSommet(i).projectOnLine(origine,limite)); distancePointProjete = sqrt( pow(v.getSommet(i).getX()-projete.getX(),2) + pow(v.getSommet(i).getY()-projete.getY(),2) + pow(v.getSommet(i).getZ()-projete.getZ(),2) ); if( distancePointProjete <= rayon && projete.getY() >= origine.getY() && projete.getY() <= limite.getY() ){ return false; } } return true; }
void afficheVoxel(Voxel voxel){ glBegin(GL_POLYGON); glVertex3f(voxel.getSommet(0).getX(), voxel.getSommet(0).getY(), voxel.getSommet(0).getZ()); glVertex3f(voxel.getSommet(1).getX(), voxel.getSommet(1).getY(), voxel.getSommet(1).getZ()); glVertex3f(voxel.getSommet(2).getX(), voxel.getSommet(2).getY(), voxel.getSommet(2).getZ()); glVertex3f(voxel.getSommet(3).getX(), voxel.getSommet(3).getY(), voxel.getSommet(3).getZ()); glEnd(); glBegin(GL_POLYGON); glColor3f(1.0, 0.0, 0.0); glVertex3f(voxel.getSommet(4).getX(), voxel.getSommet(4).getY(), voxel.getSommet(4).getZ()); glVertex3f(voxel.getSommet(5).getX(), voxel.getSommet(5).getY(), voxel.getSommet(5).getZ()); glVertex3f(voxel.getSommet(6).getX(), voxel.getSommet(6).getY(), voxel.getSommet(6).getZ()); glVertex3f(voxel.getSommet(7).getX(), voxel.getSommet(7).getY(), voxel.getSommet(7).getZ()); glEnd(); glBegin(GL_POLYGON); glColor3f(0.0, 1.0, 0.0); glVertex3f(voxel.getSommet(0).getX(), voxel.getSommet(0).getY(), voxel.getSommet(0).getZ()); glVertex3f(voxel.getSommet(4).getX(), voxel.getSommet(4).getY(), voxel.getSommet(4).getZ()); glVertex3f(voxel.getSommet(5).getX(), voxel.getSommet(5).getY(), voxel.getSommet(5).getZ()); glVertex3f(voxel.getSommet(1).getX(), voxel.getSommet(1).getY(), voxel.getSommet(1).getZ()); glEnd(); glBegin(GL_POLYGON); glColor3f(0.0, 0.0, 1.0); glVertex3f(voxel.getSommet(1).getX(), voxel.getSommet(1).getY(), voxel.getSommet(1).getZ()); glVertex3f(voxel.getSommet(5).getX(), voxel.getSommet(5).getY(), voxel.getSommet(5).getZ()); glVertex3f(voxel.getSommet(6).getX(), voxel.getSommet(6).getY(), voxel.getSommet(6).getZ()); glVertex3f(voxel.getSommet(2).getX(), voxel.getSommet(2).getY(), voxel.getSommet(2).getZ()); glEnd(); glBegin(GL_POLYGON); glVertex3f(voxel.getSommet(6).getX(), voxel.getSommet(6).getY(), voxel.getSommet(6).getZ()); glVertex3f(voxel.getSommet(2).getX(), voxel.getSommet(2).getY(), voxel.getSommet(2).getZ()); glVertex3f(voxel.getSommet(3).getX(), voxel.getSommet(3).getY(), voxel.getSommet(3).getZ()); glVertex3f(voxel.getSommet(7).getX(), voxel.getSommet(7).getY(), voxel.getSommet(7).getZ()); glEnd(); glBegin(GL_POLYGON); glVertex3f(voxel.getSommet(0).getX(), voxel.getSommet(0).getY(), voxel.getSommet(0).getZ()); glVertex3f(voxel.getSommet(4).getX(), voxel.getSommet(4).getY(), voxel.getSommet(4).getZ()); glVertex3f(voxel.getSommet(7).getX(), voxel.getSommet(7).getY(), voxel.getSommet(7).getZ()); glVertex3f(voxel.getSommet(3).getX(), voxel.getSommet(3).getY(), voxel.getSommet(3).getZ()); glEnd(); }