矩形抠图坐标计算

#include <iostream>
#include <algorithm> // for std::max and std::min

// 矩形1的坐标
double left_top_lon;          // 矩形1左上角经度
double left_top_lat;          // 矩形1左上角纬度
double right_bottom_lon;      // 矩形1右下角经度
double right_bottom_lat;      // 矩形1右下角纬度

// 矩形1的分辨率
int totalWidth;               // 矩形1的宽度
int totalHeight;              // 矩形1的高度

// 矩形2的坐标
double stit_left_top_lon;     // 矩形2左上角经度
double stit_left_top_lat;     // 矩形2左上角纬度
double stit_right_bottom_lon;  // 矩形2右下角经度
double stit_right_bottom_lat;  // 矩形2右下角纬度

void calculateIntersectionCoordinates() 
{
    // 计算交集的左上角和右下角
    double intersect_left_top_lon = std::max(left_top_lon, stit_left_top_lon);
    double intersect_left_top_lat = std::min(left_top_lat, stit_left_top_lat);
    double intersect_right_bottom_lon = std::min(right_bottom_lon, stit_right_bottom_lon);
    double intersect_right_bottom_lat = std::max(right_bottom_lat, stit_right_bottom_lat);

    // 检查交集的有效性
    if (intersect_left_top_lon > intersect_right_bottom_lon ||
        intersect_left_top_lat < intersect_right_bottom_lat) 
    {
        std::cout << "没有交集区域。\n";
        return;
    }

    // 计算交集的宽度和高度
    double intersect_width_lon = intersect_right_bottom_lon - intersect_left_top_lon;
    double intersect_height_lat = intersect_left_top_lat - intersect_right_bottom_lat;

    // 计算像素坐标转换因子
    double pixel_per_lon = totalWidth / (right_bottom_lon - left_top_lon);
    double pixel_per_lat = totalHeight / (left_top_lat - right_bottom_lat);

    // 交集左上角像素坐标
    int intersect_left_top_pixel_x = static_cast<int>((intersect_left_top_lon - left_top_lon) * pixel_per_lon);
    int intersect_left_top_pixel_y = static_cast<int>((left_top_lat - intersect_left_top_lat) * pixel_per_lat);

    // 交集右下角像素坐标
    int intersect_right_bottom_pixel_x = static_cast<int>((intersect_right_bottom_lon - left_top_lon) * pixel_per_lon);
    int intersect_right_bottom_pixel_y = static_cast<int>((left_top_lat - intersect_right_bottom_lat) * pixel_per_lat);

    // 输出结果
    std::cout << "交集区域左上角像素坐标: (" << intersect_left_top_pixel_x << ", " << intersect_left_top_pixel_y << ")\n";
    std::cout << "交集区域右下角像素坐标: (" << intersect_right_bottom_pixel_x << ", " << intersect_right_bottom_pixel_y << ")\n";
}

int main() {
    // 设置矩形1的坐标(示例值)
    left_top_lon = -100;       // 矩形1左上角经度
    left_top_lat = 50;         // 矩形1左上角纬度
    right_bottom_lon = -90;    // 矩形1右下角经度
    right_bottom_lat = 40;     // 矩形1右下角纬度

    // 矩形1的分辨率(示例值)
    totalWidth = 800;          // 矩形1宽度
    totalHeight = 400;         // 矩形1高度

    // 设置矩形2的坐标(示例值)
    stit_left_top_lon = -95;   // 矩形2左上角经度
    stit_left_top_lat = 45;     // 矩形2左上角纬度
    stit_right_bottom_lon = -92; // 矩形2右下角经度
    stit_right_bottom_lat = 38;  // 矩形2右下角纬度

    calculateIntersectionCoordinates();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值