2012-03-22 2 views
0

파일에서 일부 좌표를 읽고 3x3 격자로 다이빙하여 셀 값 (0-2)을 지정하려고합니다. 일부 값의 경우 코드는 x = 268 또는 x = 269와 같은 음수 값을 지정합니다. 내가 어디로 잘못 가고 있니?3x3 격자의 좌표에 셀 지정

76 62 
77 62 
78 62 
79 62 
81 62 
83 62 
86 62 
etc 

세포 할당하는 코드 : 당신은 최대 값과 최소값을 찾으려고 곳

int x_points[99]; 
int y_points[99]; 
int i=0; 
int x,y; 
int max_x, max_y; 
int min_x, min_y; 

while(out.good()) 
{ 
    out>>x; 
    out>>y; 

     if(i==0) 
{ 
    max_x=x; 
    min_x=x; 
    min_y=y; 
    max_y=y; 
} 
else if (x>max_x) 
{ 
    max_x=x; 
} 
else 
if(x < min_x) 
{ 
    min_x=x; 
} 
else if (y>max_y) 
{ 
    max_y=y; 
} 
else 
if(y < min_y) 
{ 
    min_y=y; 
} 
x_points[i]=x; 
y_points[i]=y; 
i++; 
} 


for(i=0; i<99; i++) 
cout<<x_points[i]<<","<<y_points[i]<<"\n"; 

int cells_x[99]; 
int cells_y[99]; 

float x_width; 
float y_width; 
int divide = 3; 

//To find out the cells. Divide it by 20 

x_width=(max_x-min_x)/divide; 
y_width=(max_y-min_y)/divide; 

cout<<"\nx_width:"<<x_width; 
cout<<"y_width:"<<y_width<<"\n"; 

int x1; 
int y1; 
for(i=0; i<99; i++) 
{ 
x1=x_points[i]-min_x; 
y1=y_points[i]-min_y; 

    for(int j=0; j<divide; j++) 
    { 
     if(j*x_width<=x1 && x1<((j+1)*x_width)) 
      cells_x[i]=j; 

     if(j*y_width<=y1 && y1<((j+1)*y_width)) 
      cells_y[i]=j; 
    } 
    cout<<cells_x[i]<<" "<<i<<" "<<cells_y[i]<<"\n"; 

} 
+0

제대로 포맷 된 코드를 디버그하고 오류를 찾아내는 것이 더 쉬울 수도 있습니다. –

+0

stackoverflow에서 서식을 지정하는 방법을 모르겠습니다. 그러나 아픈 것은 나의 formating을 더 발전시키는 것을 시도한다. – codious

답변

1

내가 볼 첫 번째 문제를 내가 함께 다음과 같은 경우 output.txt 파일이

x와 y의 값은 다음과 같습니다.

작성된 것처럼 x가 새로운 최대 또는 최소 일 때 y 값을 분석 할 수 없습니다. max_y와 min_y에는 실제로 최대 값과 최소값이 포함되어 있지 않으므로 프로그램의 나머지 부분에서 문제가 발생합니다. max_x = 8, 및 MIN_X = 0, 코드가 x_width = 8/3, 또는 약 2.6666666666666666666666666666667 초래

x_width=(max_x-min_x)/divide; // should be x_width=(max_x-min_x + 1)/divide; 
y_width=(max_y-min_y)/divide; //   y_width=(max_y-min_y + 1)/divide; 

경우

다음은이 x_width 및 y_width을 계산한다. 그러나 0-8은 3의 3 그룹으로 나눌 수 있습니다. 1을 추가하면 라인의 길이가 아닌 포인트의 수를 계산하여이를 수정합니다.

max_x == min_x 인 경우 발생하는 너비가 0이되지 않도록합니다. 다음 섹션에서 0 원인 문제의 폭 : x_width가 0 인 경우

for(int j=0; j<divide; j++) 
{ 
    /* an x_width of 0 will cause this to never evaluate to true */ 
    /* x1 cannot ever be >= to 0 AND < 0 */ 
    if(j*x_width<=x1 && x1<((j+1)*x_width)) 
     cells_x[i]=j; 

    if(j*y_width<=y1 && y1<((j+1)*y_width)) 
     cells_y[i]=j; 
} 

은, 당신은 할 수있는, 그것은 여전히 ​​초기 값으로 설정됩니다 즉, [i]를 cells_x에 값을 할당하지 않습니다 음수

+0

미안하지만 디버거를 실행할 때 각각의 값을 포함합니다. – codious

+0

표시되는 실제 출력을 첨부 할 수 있습니까? –

+0

코드를 수정했지만 xwidth = 0을 고려하지 않았습니다. 그 중 하나에 대해 감사드립니다. 이것은 지금 작동해야합니다. – codious