求助!!各位!!一个算法问题!!!!!!!!
题目是:判断两个矩形是否重合。(含有相同的像素点就算重合)已知:两个矩形的型心p(p');转角a(a');宽w(w');高h(h')。以上是参数。
要求:用c/c++写算法!
谢谢各位高手!!
你再解释一下什么是重合
这只是一个基本的计算机图形学问题,不会很困难。但你说的重合好象没表达清楚,下面的图形中矩形是不是重合的?属于重合!!计算机图形学,很难么?
谢谢了。Re:
首先,你可以利用ACAD的某些功能来实现,这并不牵涉复杂的算法。先将要判断的矩形面域化,再求面域的交,若其交集为空,再判断是否有重复端点即可。
要用高级语言作出算法实现也不很困难,但有点麻烦,要使用到很多解析几何方法。以下仿照计算机图形学的矢量裁剪算法给出一个思路,据此你应该很容易作出高级语言的算法表述。
第一步,计算矩形各端点坐标,这应该不难;
第二步,以矩形1(为表达方便,假设要判断的是矩形1和矩形2)为参考,旋转坐标系。计算新坐标系中矩形各端点坐标。(我不记得坐标旋转后坐标计算公式了,你去查查书。)
第三步,若以下任何一个条件满足,则矩形不“重合”(我觉得说相交更准确)
MAX(矩形2各端点X坐标)<MIN(矩形1各端点X坐标)
MAX(矩形1各端点X坐标)<MIN(矩形2各端点X坐标)
MAX(矩形2各端点Y坐标)<MIN(矩形1各端点Y坐标)
MAX(矩形1各端点Y坐标)<MIN(矩形2各端点Y坐标)
否则下一步。
第四步,判断矩形2的端点是否有位于矩形1内部(这同样只要进行坐标比较),若有,矩形相交,否则下一步。
第五步,计算矩形2各边与矩形1的交点,只要有一个交点在矩形1内部,则矩形相交。若所有交点都在矩形1外部,两矩形不相交。
确实很麻烦,程序实现会有很多行代码。
谢谢
页:
[1]