[C] Use a single loop to access neighbor pixels.

spring·2020년 11월 9일
0

4-direction loop

int x = 1, y = 0;
do {
    printf("%d,%d\n", x, y);
    x ^= y ^= x ^=y*=-1;
} while (x*y + x<1);

(1,0)
(0,1)
(-1,0)
(0,-1)
의 순서로 순회를 하게 되며 각 단계별 진행은 Swap연산후 x의 부호를 바꿔주는 방식이다. 종료 조건은 xy+x가 양수일 때 종료하게 되며 조건전 증감루프이기 때문에 처음으로 돌아오게 되면 종료한다.

8-direction loop

int x = 1, y = 0;
do {
    printf("%d,%d\n", x, y);
    x ^= y ^= x ^=y*=-1;
} while (x*y + x<1 || (y==0 && (y=1)));

8방향은 앞서 설명한 4방향을 모두 순회한 후, (1,0) 이 되었을 때 y를 1로 변경한다.
(1,1)
(-1,1)
(-1,-1)
(1,-1)
그렇게 되면 위와 같이 순회 하게 되는데 xy+x 의 식이 양수인데 y가 0이 되면 모든 변수를 1로 설정하고 다시 반복한다. 그 후에 x,y가 반복되어 돌아오면 종료한다.

profile
Researcher & Developer @ NAVER Corp | Designer @ HONGIK Univ.

0개의 댓글