

그림 1인 경우에는 시계방향으로 돌며 인식하는 패턴에 의해..
a,b,c,d 각 좌표의 끝이 마지막 배열에 저장되므로.
별로 문제될 것 없이 각 4꼭지점을 쉽게 찾을 수있다..
그러나 그림2같은 경우는 각 초록색점들이 배열에 저장되므로
위에 사진과 같이 제대로된 꼭지점을 찾지 못한다.(초록색사각형)
-> 해결방안
각 끝쪽을 찾기위해서 패턴인식하는중에 찾은 네개의 정보를
이용하였다..
먼저 배열을 4개 선언하고..
각 패턴이동시에 동작한 if문 함수(네개의 정보를 찾기 위한 소스)
에서 모든 흔적을 배열에 각각 저장하였다.
--이하 소스 참조--
// 꼭지점 찾는 소스
if(x_move>=old_x_right){
// 최고오른쪽의 꼭지점을 찾기위한 소스이지 위쪽 오른쪽 꼭지점을 찾는 소스가 아니다.
old_x_right = x_move;
old_x_right_y = y_move;
ppt2[count_ppt2]=xy;
count_ppt2++;
}else if(x_move<=old_x_left){
old_x_left = x_move;
old_x_left_y = y_move;
ppt4[count_ppt4]=xy;
count_ppt4++;
}
if(y_move>=old_y_up){
old_y_up = y_move;
old_y_up_x = x_move;
ppt1[count_ppt1]=xy;
count_ppt1++;
}else if(y_move<=old_y_down){
old_y_down = y_move;
old_y_down_x = x_move;
ppt3[count_ppt3]=xy;
count_ppt3++;
}
위에 소스중에서 if(x_move>=old_x_right){에
>=가 중요하다..=가 없다면 --------이 부분에서..
나머지 값들은 무시될수 있기 때문이다.
그럼 >만써서 처음 값만 저장하면 되지 않느냐하는
의문도 생기지만..
만약에 >로 쓰면 그림 1과 그림 2의 문제점이 바뀌어
버린다..그림2는 별 탈없이 인식이 되지만..
처음 값들만을 저장하기 때문에... 그림1과 같이 마지막
값이 필요한 경우 마찬가지로 꼭지점찾는데 문제가 생긴다..
결국엔 둘중 하나는 희생해야되는 것이다..
이렇게 저장한 배열에서 중앙y축을 기준으로 하여
old_y_up_x(제일 위쪽의 좌표-아직 완전한 꼭지점은 아님)
가 xx_half축보다 작으면 그림2와 같은 상황이 되고...소스가 동작하게 된다.
그리고 저장된 count_ppt1만큼 배열에 저장된 데이터로 부터 모든 y축 값을 뽑아네고.그 값이
old_y_up(제일 위쪽 y축값)이랑 같은 값만 if문에 실행되도록 하였다..
그러면 제일 위쪽의 ----------부분들만 처리할수 있게 된다..
이값들은 y축값은 다 같지만 x축값은 다 다르다..
이 x축 값 가운데 가장 작은 값을 찾으면..그 좌표가 바로 꼭지점이 된다.
나머지 3개의 꼭지점도 이런식으로 찾았다.
CString CColorCodeDlg::find_4points()
{
int x_x,y_y,o=0;
CString zzz;
if(old_y_up_x<xx_half){
for(o; o<=count_ppt1;o++){
y_y=Returrnsy(ppt1[o]);
if(y_y==old_y_up){
x_x=Returrns(ppt1[o]);
if(result_up_x>x_x){
result_up_x=x_x;
old_y_up_x=x_x;
}
}
}
for(o; o<=count_ppt2;o++){
x_x=Returrns(ppt2[o]);
if(x_x==old_x_right){
y_y=Returrnsy(ppt2[o]);
if(result_right_y<y_y){
result_right_y=y_y;
old_x_right_y=y_y;
}
}
}
for(o; o<=count_ppt3;o++){
y_y=Returrnsy(ppt3[o]);
if(y_y==old_y_down){
x_x=Returrns(ppt3[o]);
if(result_down_x<x_x){
result_down_x=x_x;
old_y_down_x=x_x;
}
}
}
for(o; o<=count_ppt4;o++){
x_x=Returrns(ppt4[o]);
if(x_x==old_x_left){
y_y=Returrnsy(ppt4[o]);
if(result_left_y>y_y){
result_left_y=y_y;
old_x_left_y=y_y;
}
}
}
}else if(old_y_up_x<xx_half){
}
// 초기화
result_down_x=0;
result_left_y=240;
result_up_x=320;
result_right_y=0;
count_ppt1=0;
count_ppt2=0;
count_ppt3=0;
count_ppt4=0;
return "";
}