2009-06-01 27 views
5

Tôi muốn di chuyển qua các điểm ảnh của một hình ảnh, không phải bằng cách đi từng dòng, cột theo cột theo cách "bình thường". Nhưng bắt đầu tại điểm ảnh trung tâm và đi ra ngoài trong một chuyển động xoắn ốc. Nhưng tôi không chắc chắn làm thế nào để làm điều này. Bất kỳ đề xuất nào về cách thực hiện điều này?C# Di chuyển qua một hình ảnh theo chuyển động xoắn ốc?

+0

Bạn có thể rõ ràng hơn về cách bạn mong đợi điều này hoạt động trên một hình ảnh không vuông? ... chỉ những hình ảnh vuông sẽ hoạt động hoàn hảo với hình xoắn ốc, bất kỳ thứ gì khác bạn sẽ nhấn vào một bộ cạnh trước ... – jerryjvl

Trả lời

5

Bạn có thể thực hiện điều này bằng cách sử dụng hàm tham số, hàm bán kính là r (t) = R và x (t) = Rcos (t) và y (t) = Rsin (t). Bạn có ý nghĩa gì đó giống như this?

+0

Điều đó trông giống như những gì tôi muốn. Cảm ơn nhiều! –

0

Sẽ hữu ích khi suy nghĩ về điều này ngược lại. Ví dụ, bắt đầu từ góc trên cùng bên trái và di chuyển theo chiều kim đồng hồ, bạn sẽ di chuyển dọc theo hàng trên cùng, sau đó xuống phía bên tay phải, dọc theo phía dưới, và lên cạnh trái tới điểm ảnh dưới điểm xuất phát. .

Sau đó di chuyển dọc theo hàng thứ hai và tiếp tục theo hình xoắn ốc.

Tùy thuộc vào kích thước của hình ảnh bạn sẽ kết thúc bằng một cột đơn pixel hoặc một hàng pixel và sẽ di chuyển lên/xuống hoặc trái/phải.

Từ điểm kết thúc này, bạn có thể làm theo các bước của mình về phía sau và xử lý tất cả các pixel khi cần.

Để tìm ra vị trí bắt đầu bằng toán học, bạn cần biết chiều rộng/chiều cao của hình ảnh cũng như pixel bạn muốn kết thúc và hướng bạn muốn di chuyển khi bạn đến điểm ảnh cuối cùng .

0

Something như thế này nên làm điều đó:

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++; 
    } 
} 

Nếu hình ảnh không phải là hình vuông, đường xoắn ốc sẽ tiếp tục bên ngoài tọa độ của hình ảnh cho đến khi toàn bộ hình ảnh đã được bảo hiểm. Điều kiện trong tuyên bố if đảm bảo rằng chỉ các tọa độ là một phần của hình ảnh được xử lý.

Các vấn đề liên quan