繁体   English   中英

检查两个矩形是否重叠或边缘是否接触

[英]Check if two rectangles overlap or the edges touch

我在lon和lat遇到地理坐标,例如NorthWest和SouthEast lon / lat。 因此,当我得到它们时,我将其转换为公制。 所以在这里,我得到了第一个具有north_west和south_east坐标的矩形,然后在具有北,南,西和东坐标的同一度量系统中有了边界矩形。 我需要检查边缘触摸内的交点上的这两个矩形,我写了什么:

bool filter(TilePosition const& tile_position) const noexcept override 
{
    MetricBoundingBox tile_bounds{tile_position};

    bool cond1 = (tile_bounds.north <= south_east_.lon);
    bool cond2 = (tile_bounds.south >= north_west_.lon);
    bool cond3 = (tile_bounds.west <= south_east_.lat);
    bool cond4 = (tile_bounds.east >= north_west_.lat);

    return cond1 && cond2 && cond3 && cond4;
} 

我不确定我做对了吗? 我的要求是,如果第二个矩形的边界与第一个矩形的边界相交,则必须保留第二个矩形。 否则,过滤器。

您的解决方案不正确。

除了混淆纬度和经度的含义外,您还有一个基本问题,即为笛卡尔坐标空间设计的算法在圆柱坐标中不起作用,因为经度是周期性的。 对于子午线附近的矩形来说,一切看起来似乎还可以,但是当您在环绕点(经度/ + /-180度)附近开始测试时,此方法将失败。

一种简单的解决方法是将每个与环绕点交叉的矩形分成两个不交叉的矩形。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM