#ifndef __RANGE_TOOL_H__ #define __RANGE_TOOL_H__ #ifdef __cplusplus extern "C" { #endif struct Point { float x, y; }; // 判断点 (px, py) 是否在由四个点构成的四边形内 bool isPointInPolygon(float px, float py, const Point range[4]) { int i, j, n = 4; bool inside = false; // 使用射线法判断点是否在多边形内 for (i = 0, j = n - 1; i < n; j = i++) { float xi = range[i].x, yi = range[i].y; float xj = range[j].x, yj = range[j].y; // 判断是否与边相交 bool intersect = ((yi > py) != (yj > py)) && (px < (xj - xi) * (py - yi) / (yj - yi) + xi); if (intersect) inside = !inside; } return inside; } // 判断range是否为空(全为0) bool isRangeEmpty(float range[8]) { for (int i = 0; i < 8; i++) { if (range[i] != 0.0f) { return false; // 只要有一个非0值,说明不是空的 } } return true; // 全为0时返回true } bool isBoxInPolygon(float xmin, float xmax, float ymin, float ymax,const Point range[4]){ return isPointInPolygon(xmin,ymax,range) & isPointInPolygon(xmax,ymax,range); } #ifdef __cplusplus } #endif #endif