2009-06-01 2 views
5

이미지의 픽셀을 이동하려고합니다. 행별로 이동하지 않고, "정상적인"방식으로 이동합니다. 그러나 중심 픽셀에서 시작하여 나선형 모션으로 바깥쪽으로 이동하십시오. 하지만 어떻게해야할지 모르겠습니다. 이 작업을 수행하는 방법에 대한 제안 사항이 있으십니까?C# 나선형 모션으로 이미지를 이동 하시겠습니까?

+0

정사각형이 아닌 이미지에서이 동작을 어떻게 기대할 수 있습니까? ... 정사각형 이미지 만 나선형으로 완벽하게 작동합니다. 다른 것들보다 가장자리의 한 세트를 치면 다른 것 ... – jerryjvl

답변

5

매개 변수 함수를 사용하면 반경 함수가 r (t) = R이고 x (t) = Rcos (t) 및 y (t) = Rsin (t) 일 수 있습니다. this과 같은 것을 의미합니까?

+0

그건 내가 원하는 것처럼 보입니다. 고마워요! –

0

역으로 생각하면 도움이 될 것입니다.

예를 들어 왼쪽 상단에서 시작하여 시계 방향으로 이동하면 맨 위 행을 따라 이동 한 다음 오른쪽을 따라 아래쪽을 따라 이동하고 왼쪽 가장자리를 시작점 아래의 픽셀까지 이동합니다 .

그런 다음 두 번째 행을 따라 이동하고 나선형으로 계속하십시오.

이미지의 크기에 따라 픽셀의 단일 열 또는 픽셀의 단일 행으로 끝나고 위/아래 또는 왼쪽/오른쪽으로 이동합니다.

이 완료 지점에서 뒤로 단계를 수행하고 필요한 모든 픽셀을 처리 할 수 ​​있습니다.

시작 위치를 수학적으로 계산하려면 이미지의 너비/높이와 마지막 픽셀에 도달했을 때 이동하려는 픽셀의 방향을 알아야합니다. . 이 같은

0

뭔가를 수행해야합니다 이미지가 사각형이

int x = width/2; 
int y = height/2; 
int left = width * height; 
int dir = 0; 
int cnt = 1; 
int len = 2; 
int[] move = { 1, 0, -1, 0, 1 }; 
while (left > 0) { 
    if (x >= 0 && x < width && y >= 0 && y < height) { 
     // here you do something with the pixel at x,y 
     left--; 
    } 
    x += move[dir % 4]; 
    y += move[(dir % 4) + 1]; 
    if (--cnt == 0) { 
     cnt = len++/2; 
     dir++; 
    } 
} 

경우 전체 이미지가 덮여 때까지, 나선은 이미지의 좌표 밖에 나갈 것입니다. if 문에서 조건은 이미지의 일부인 좌표 만 처리되도록합니다.

관련 문제