Có một cái nhìn tại đây. Nó hoạt động thông qua một số sơ đồ rất rõ ràng.
http://www.mathopenref.com/coordpolygonarea2.html
Họ chỉ là tính diện tích và bạn đang liệt kê điểm. Tuy nhiên bạn có thể thích nghi với những ý tưởng này. Hãy xem xét kỹ 'Trường hợp phức tạp hơn' và cách các đường nằm ngang chia đa giác thành một tập hợp các hình thang (nếu bạn nhận ra một hình tam giác là hình thang suy biến có cạnh dài bằng 0).
Nếu đa giác của bạn (có khả năng) lõm, bạn cần loại bỏ một số hình thang dựa trên hướng di chuyển của quy tắc Y (n) -Y (n + 1) được đề cập trong văn bản.
Vì vậy, bây giờ bạn đã giảm việc liệt kê các điểm trong một đa giác thành liệt kê các điểm trong một loạt các hình thang. Điều đó không nên quá khó, đặc biệt là các hình thang được định hướng độc đáo là "bị kẹt" hai đường thẳng song song với trục X. Có lẽ dễ nhất để làm điều đó trong quá trình quét raster vì vậy bạn chỉ phải tính bắt đầu X và kết thúc X của mỗi hàng raster.
Cấu trúc dữ liệu của bạn có thể trông giống như một danh sách các đa giác, một chỉ mục cho biết bạn đang ở trong đa giác nào, x và y phối hợp với bạn và chỉ mục cuối của hàng raster bạn đang ở.
Tôi cho rằng bạn không quan tâm đến thứ tự bạn liệt kê!
Sự phức tạp hơn nữa sẽ xảy ra nếu 'đa giác' của bạn bao gồm các hình dạng rời rạc (nghĩa là thực sự nhiều hơn một đa giác hoặc có thể chứa các 'lỗ' đa giác.
Độ phức tạp của việc thu được các hình thang là khá thấp nhưng việc lặp lại qua một số lượng lớn các điểm có thể khá chậm. Tôi không biết bạn đang làm điều này để làm gì nhưng như được chỉ ra bởi Stephane Hockenhull trên một trọng lượng thông thường để làm cho nó dễ dàng hơn là sử dụng một xấp xỉ thô.
Điều đó có nghĩa là thực sự quét theo các bước của (nói) 5 và (nếu thuật toán của bạn có thể sửa chữa được) coi điểm trung tâm của ô 5 * 5 'là đại diện nào đó.
Tôi hy vọng bạn không tìm kiếm một câu trả lời dễ dàng? Tôi muốn thấy một số mã cho việc này!