Câu hỏi này đã có một câu trả lời ở đây:
Point in Polygon aka hit test
C# Point in polygonLàm thế nào để kiểm tra xem một điểm (x, y) có nằm trong một đa giác trong hệ tọa độ Descartes không?
Cho một đa giác ngẫu nhiên xây dựng với phương trình dòng N trong Descartes hệ tọa độ, là có bất kỳ công thức tiêu chuẩn đó là được sử dụng để kiểm tra thành viên của một điểm (x, y)?
Giải pháp đơn giản là lấy tất cả các công thức dòng và kiểm tra xem điểm X nằm dưới dòng này, phía trên dòng đó và bên phải của dòng khác, v.v. Nhưng điều này có thể sẽ tẻ nhạt.
Tôi nên lưu ý rằng đa giác có thể có hình dạng bất kỳ với bất kỳ số cạnh nào và có thể lõm hoặc lồi.
Để thuận tiện tôi đã thêm những chức năng tiện ích:
float slope(CGPoint p1, CGPoint p2)
{
return (p2.y - p1.y)/(p2.x - p1.x);
}
CGPoint pointOnLineWithY(CGPoint p, float m, float y)
{
float x = (y - p.y)/m + p.x;
return CGPointMake(x,y);
}
CGPoint pointOnLineWithX(CGPoint p, float m, float x)
{
float y = m*(x - p.x) + p.y;
return CGPointMake(x, y);
}
Điều này đã được thảo luận trong thời gian dài ở đây, xem http://stackoverflow.com/questions/217578/point-in-polygon-aka-hit-test –
ah, đóng cửa! – TheOne