I 가지는 벡터 형의 정렬 방법의 이하 연산자 재정의 대한 다음 펑 :함수
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;
}
: getSlope는 다음과 같이 정의 된 함수이다
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);
};
각 점은 인덱스, x 및 y 좌표로 지정됩니다. 각 edge는 source-edge [0]과 destination-edge [1]에 의해 주어진다. 여기서 edge [0], edge [1]은 점들의 색인이다. 가장자리를 정렬하고 싶습니다 : - 가장자리의 x 좌표로 [0] 좌표가 지정됩니다. (두 개의 가장자리 중 x가 다른 경우) - 가장자리 [y] 좌표의 y 좌표에 따라 (x가 2 모서리가 동일) - 해당 슬로프 (모서리의 x와 모서리의 y가 같은 경우).
은 내가 getSLope 함수가 static으로 선언,하지만 난sort(myEdges_.begin(),myEdges_.end(),order());
로 가장자리를 정렬 할 때 마지막 조건은 fullfilled되지 않습니다. edgep [0]에 대해 동일한 x 및 y를 가진 두 개의 가장자리가 있지만 기울기가 다른 경우 (예 : ) 기울기 (edge1) = 1, 기울기 (edge2) = 1/2 내가 원하는 것보다 [edge2, edge1]; 대신 나는 [edge1, edge2]를 얻는다. 그래서 내 getSlope 기준이 계산되지 않습니다.
왜냐하면 내가 getSlope를 정적으로 선언했기 때문입니까? 기준이 충족되도록 변경해야하는 항목은 무엇입니까? 미리 제안 해 주셔서 감사합니다. madalina
해야 내가 거짓 &&의 SomeFunction을 것 같아요() <된 SomeFuncion() (부울 &&의 BOOL) 또는 나는 틀린가? – madalina
디버거 또는 방정식의 부분을 인쇄하여 확인하십시오. 그렇다면 someFunction()
bayda