함수

2009-04-08 4 views
0

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

답변

0

표현 결과를 계산하지 않아서 일이 일어 났을 수 있습니다. 이것은 좋은 규칙은

false && someFunction(); - function will not be called 
true || someFunction(); - function will not be called 


는 예컨대 : 그것은 우리가 다음 쓸 수 있습니다 :

if (ptr && ptr->someMethod()) 
// call method will not be called for NULL pointers 
+0

해야 내가 거짓 &&의 SomeFunction을 것 같아요() <된 SomeFuncion() (부울 &&의 BOOL) 또는 나는 틀린가? – madalina

+0

디버거 또는 방정식의 부분을 인쇄하여 확인하십시오. 그렇다면 someFunction() bayda

1

크리 키를! 그것은 매우 복잡해 보입니다. 첫째, 덜 복잡한 값 집합을 사용하여 계산을 시도했습니다. 즉, 당신이 cout 문을 가지고 있다는 것을 알았습니다. 실행했을 때 올바르게 작동한다고 믿습니다.

때문에, getSlope로 입력이 잘못된 것일 IUT 경우 -하지

getSlope(myPoints_[edge2[0][0],myPoints_[edge2[0][1],  
     myPoints_[edge2[1]][0],myPoints_[edge2[1]][0]) 

getSlope(myPoints_[edge2[0][0],myPoints_[edge2[0][1],  
     myPoints_[edge2[1]][0],myPoints_[edge2[1]][1]) 
+0

예! edge2 [1]에 대한 잘못된 색인이었습니다. 고마워요. 꽤 복잡해 보입니다. – madalina

+0

내 기쁨. 지금 내놔, 내놔, 내놔, :) – gbjbaanb