Newer
Older
lynxi-plugin / src / multi_post_process / rangeTool.h

#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