Reel Plan::angleOrienteParProjection(const Vecteur3D& vect1,const Vecteur3D& vect2) { Vecteur3D proj1 = projete(vect1); Vecteur3D proj2 = projete(vect2); Reel sinAngle = (proj1^proj2)*normalUnitaire/(proj1.norme()*proj2.norme()); return asin(sinAngle); }
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 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; }