判断两个矩形(外包络线)是否相交

  首先考虑什么是相交,在GIS中相交是怎么定义的,请参考博客GIS中相交的定义(OGC相交的定义)

  定义我们明白了,就是两个矩形的有公共的部分,我们分为三种情况去写。

  • 情况一:一个矩形的顶点在另一个矩形中,如下图的情况这种情况矩形一定相交。

  • 情况二:一个矩形在一个矩形内部,其实这个可以看成是情况一的特殊情况。

  • 情况三:其中一个矩形的任何一个点都不在矩形的内部,但还是相交了。
  • 情况四:也就是最后一种情况,这种情况就是边和边相交。

  那么问题来了,这么多种情况,每个都进行判断比较麻烦,用一种方法能不能解决这样的四种情况,答案是可以的,就叫做包络线发吧。

  

  很容易从图中看出来,如两个矩形的外包络线的宽大于两个矩形宽的和或者外包络线的高大于两个矩形高的和,两个矩形一定不想交。

  

Envelope red = new Envelope();//红色的矩形
Envelope green = new Envelope();//绿色的矩形
Envelope out = new Envelope();//外接矩形

if(out.width <= red.width+green.width || out.height <= red.height+green.height)
{
    return true;        
}

  

 作者   Young-Ken(微博)

 审阅者 Cindy-Leee(微博)

 转载请注明 http://www.cnblogs.com/youngKen/p/4978240.html

  

原文地址:https://www.cnblogs.com/youngKen/p/4978240.html