inPolygonBorder method
返回一个点是否在一个多边形边界上
Implementation
bool inPolygonBorder(List<Offset> mPoints) {
for (int i = 0; i < mPoints.length; i++) {
Offset p1 = mPoints[i];
Offset p2 = mPoints[((i + 1) % mPoints.length)];
if (dy < min(p1.dy, p2.dy)) {
continue;
}
if (dy > max(p1.dy, p2.dy)) {
continue;
}
if (p1.dy == p2.dy) {
double minX = min(p1.dx, p2.dx);
double maxX = max(p1.dx, p2.dx);
// point在水平线段p1p2上,直接return true
if ((dy == p1.dy) && (dx >= minX && dx <= maxX)) {
return true;
}
} else {
// 求解交点
double x = (dy - p1.dy) * (p2.dx - p1.dx) / (p2.dy - p1.dy) + p1.dx;
if (x == dx) {
return true;
}
}
}
return false;
}