300分,如何用坐标方法判断两个panel是否相交?(300分)

  • 主题发起人 主题发起人 nsj
  • 开始时间 开始时间
顶点相交的意思就是只要rect2同rect1的顶点重合就算,不是指相接
 
to yostgxf:
不好意思,是我理解错误了。
内相交:
┏━━━━━━━━┓
┃R1┏━━━━┓ ┃
┃ ┃ R2 ┃ ┃
┃ ┗━━━━┛ ┃
┗━━━━━━━━┛
边相交:
┏━━━━━━━━┓ 或 ┏━━━━━━━━┓
┃ R1 ┃ ┃ R1 ┣━━━━┓
┃ ┏━━━━┓ ┃ ┃ ┃ R2 ┃
┃ ┃ R2 ┃ ┃ ┃ ┣━━━━┛
┗━┻━━━━┻━┛ ┗━━━━━━━━┛

顶点相交

┏━━━━━━━━┓ 或 ┏━━━━━━━━┓
┃ R1 ┃ ┃ R1 ┃
┃ ┏━━━━┫ ┃ ┃
┃ ┃ R2 ┃ ┃ ┃
┗━━━┻━━━━┛ ┗━━━━━━━━╋━━━━┓
┃ R2 ┃
┗━━━━┛
普通相交:
┏━━━━━━━━┓
┃ R1 ┃
┃ ┏━━━━╋━━┓
┃ ┃ ┃ ┃
┗━━━╋━━━━┛ ┃
┃ R2 ┃
┗━━━━━━━┛

 
to TYZhang:
边相交R2可以在R1的内部,只要边重合就算,顶点和内部同理;
也就是说R2可能同时和R1是内部、顶点、边相交的;
 
哈哈,懒的画,copy你的我修改一下,一个意思(我的理解的不同部分)

边相交:
┏━━━━━━━━┓
┃ R1 ━━┣━━━━┓
┃ ┃ ┃ R2 ┃
┃ ━━┣━━━━┛
┗━━━━━━━━┛

┏━━━━━━━━┓
━━━━━━━ ━━┣━━━━┓
┃ ┃ ┃ R2 ┃
━━━━━━━ ━━┣━━━━┛
┗━━━━━━━━┛
算交叉相交
 
哈哈,大家同意我的方案嘛
function IntersectRect(out Rect: TRect; const R1, R2: TRect): Boolean;
1。内部相交(Rect=R1 或 Rect=R2)
否则再用ptInRect
2。边相交或交叉相交(二个顶点或0个顶点在另一个Rect内)
3。顶点相交(一个顶点在另一个Rect内)
我没考虑相切
 
to yostgxf:
不对,在1中,当他们内部相交是,你没办法判断是边相交还是内容相交,因为他们都为真;
 
呵呵,我没考虑相切。
可以再加判断来细分呀。(通过顶点坐标)
 
老兄,我们本不明白你的具体定义和需求。
总结起来无非用三种方法:
1。IntersectRect
2。顶点加ptInRect
3。顶点的X,Y坐标。
思路基本清楚了,再往下讨论,你就太贪心了。:(
 
谢谢各位,不过确实有点绞了;:)
 
:) 晚安!好运
 
怎么就不知道用GetWindowRect呢,可以得到针对屏幕的panel的rect。
 
原来这个问题这么复杂◎¥◎#%
 
yostgxf,能不能多聊聊,有问题请教,
qq:80779728
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
922
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部