je le foncteur suivant pour redéfinir l'opérateur moins de la méthode de tri pour le type de vecteur:dans la définition du foncteur
typedef vector< vector<int> > MxInt2d;
typedef vector< vector<double> > MxDouble2d;
class QSweep{
public:
....
static MxDouble2d myPoints_;
MxDouble2d myEdges_;
class order{
public:
bool operator() (const vector<int>& edge1, const vector<int>& edge2){
//std::cout<<"inside sort"<<endl;
//3 sort criteria
return (myPoints_[edge1[0]][0]<myPoints_[edge2[0]][0])||
(myPoints_[edge1[0]][0]==myPoints_[edge2[0]][0]&&
myPoints_[edge1[0]][1]<myPoints_[edge2[0]][1])
||
(myPoints_[edge1[0]][0]==myPoints_[edge2[0]][0]&&
myPoints_[edge1[0]][1]==myPoints_[edge2[0]][1]&&
getSlope(myPoints_[edge1[0]][0],myPoints_[edge1[0][1],
myPoints_[edge1[1]][0],myPoints_[edge1[1]][0])
<
getSlope(myPoints_[edge2[0][0],myPoints_[edge2[0][1],
myPoints_[edge2[1]][0],myPoints_[edge2[1]][0]));
}
};
static double getSlope(double a, double b, double c, double d);
};
où getSlope est une fonction définie de la manière suivante:
double QSweep::getSlope(double a, double b, double c, double d){
double slope=0.0;
//std::cout<<"slope criteria"<<endl;
double denum=c-a;
if (denum==0){
std::cout<<"zero denominator"<<endl;
}
else{
slope=(d-b)/denum;
}
return slope;
}
Chaque point est donné par un index, une coordonnée x et ay; Chaque arête est donnée par l'arête source [0] et l'arête de destination [1], où arête [0], arête [1] sont les index des points). Je veux arranger le bord: - par la coordonnée x de leurs coordonnées de bord [0] (si les x de 2 arêtes sont différentes) - par la coordonnée y de leur bord [0] coordonnée (si les x de 2 les arêtes sont égales) - par leurs pentes correspondantes (si les x des arêtes et les y des arêtes sont égaux).
Je déclare la fonction getSLope statique, mais quand je trier les bords avec
sort(myEdges_.begin(),myEdges_.end(),order());
la dernière condition n'est pas REMPLI. si j'ai deux arêtes avec les mêmes x et y pour edgep [0] mais avec des pentes différentes, par ex. pente (edge1) = 1, pente (edge2) = 1/2 que je voudrais obtenir [edge2, edge1]; Au lieu de cela, j'obtiens [edge1, edge2]. Donc, mes critères getSlope ne sont pas calculés.
est-ce parce que j'ai déclaré getSlope statique? Que devrais-je changer pour que les critères soient remplis? merci d'avance pour vos suggestions, madalina
Je crois avoir faux && someFunction() (bool && bool)
madalina
Vérifiez cela avec le débogueur ou imprimez des parties de l'équation. si oui - someFunction()
bayda