矩形相交的快速算法
typedef struct MAPINFO_ENTITYORDER
{
char szAttrib[50]; //实体为文本时,是文本内容,否则是属性值
RECT entyrect; //实体大小
int nID; //实点编号
int ncnt; //在JDT文件的具体位置
}MAPENTITY;
typedef CTypedPtrList<CPtrList, MAPENTITY*> CEntSearchList;
CEntSearchList m_entIndex ;
MAPENTITY成员中的矩形entyrect大小所属的范围都在m_rectMap内,其中m_rectMap已知。
作一个队列m_entIndex,添加MAPENTITY成员,现在有个指定的矩形m_rectChs,与m_rectMap有相交 ;
现在要求能快速判断m_rectMap矩形内的所有矩形entyrect哪些与m_rectChs有相交。
要求作个算法,如何在添加MAPENTITY入队时按entyrect作一定的排序(如何排序是关键),使能
快速判断哪些矩形与m_rectChs相交。
顺序遍历可行,但速度最慢,队列中的每一个都要与m_rectChs比较,时间上没有节省。
能否作个算法,先以入队的矩形作个排序,比较到一定位置时,若无相交了,则后面就无需再作比较了,
这样就可节省时间。这种算法要求最坏的比较是全部(每一个都比较),最好是比较一个或几个。
[主要是队列中的内容比较多,另外还要与其它几个队列中的内容比较,有没有与m_rectChs相交,所以要作个算法]
本人想过把每个成员中的entyrect的topleft与m_rectMap的topleft的距离大小进行排序,再得到m_rectChs与
m_rectMap的相交矩形m_rectInter,但这样的排序后,与m_rectInter比较,无法判断到哪种状态后,
矩形entyrect就一定在矩形m_rectInter的外面,并且此矩形entyrect后面的一定也在m_rectInter外面。
提供算法思路的都有分,能提供代码最好。xxf_yath@163.com