当前位置: 首页 > 知识库问答 >
问题:

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

呼延震博
2023-03-14

我有经度和纬度的地理坐标,比如西北和东南经度/纬度。所以,当我得到它们的时候,我把它们转换成公制。因此,这里我得到了我的第一个西北和东南坐标的矩形,然后我有了北,南,西,东坐标的相同公制中的边界矩形。我需要检查这两个直角相交的边,我写的是:

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;
} 

我不确定我做得对不对?我的要求是,如果第二个矩形的边界与第一个矩形的边界相交,那么第二个必须留在左边。否则,过滤。

共有1个答案

阎知
2023-03-14

您的解决方案不正确。

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

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

 类似资料:
  • 我试图找出两个矩形是否相互重叠。我将下面的矩形表示为< code>[x1,x2] x [y1,y2] 我只需要一个伪代码,我可以实现它来查找矩形是否彼此重叠。

  • 问题内容: 我想看看我从数据库读取的时间是否与用户提供的时间重叠。 我的数据库如下所示: 我的代码如下所示: 如果我故意输入两次重叠的时间,则不会回显错误。我究竟做错了什么? 问题答案: 当且仅当以下条件中的至少一个成立时,两个时间段P1和P2重叠: P1在P2的开始和结束之间开始() P2在P1的开始和结束之间开始() 这将捕获部分重叠的期间以及一个完全覆盖另一个期间的期间。如果两个周期重叠,则

  • 问题内容: 我有两个日期范围,(start1,end1)::: >> date1 &&(start2,end2)::: >> date2。 我想检查两个日期是否为OverLaped。 我的流程图 假定“ <> =”运算符对于比较是有效的。 } 任何建议将不胜感激。 问题答案: 您可以为此使用Joda-Time。 它提供指定开始时刻和结束时刻的类,并可以检查与的重叠。 就像是 版画 因为第一个间隔的

  • 每个扇区可以表示为(x,y,r,a,d),其中x,y是位置,r是半径,d是方向,a是角度。给定两个圆形扇区的这些信息,如何确定它们是否相互重叠?有没有什么高效的算法来解决它?谢谢!

  • 问题内容: 我需要检查数据库中是否还有两个日期和另外两个日期。 我的数据库看起来像这样 在我的查询中,我指定范围:开始日期和结束日期让我们对其进行如下分配: 上面应该归还我所有的记录,因为所有的时间都超过了时间跨度。 但是我无法使查询工作:/ 我已经尝试了以下查询,但是没有运气: 这将返回两个结果: 1和3 我究竟做错了什么? 问题答案: 我相信以下条件会匹配所有可能的重叠情况。 除非您声明了非逻

  • 我是libGDX的新手,据我所知,Intersector类有矩形/矩形、圆/圆、圆/矩形和多边形/多边形的重叠方法,但由于某种原因,它似乎没有任何检查多边形/矩形或多边形/圆的方法。 有没有推荐的方法来检查多边形和矩形/圆之间的冲突? 另外,为什么这被排除在跨部门类之外,有什么原因吗?(即,我应该避免它吗?如果是这样,推荐的替代方案是什么?