N nsj Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #1 空间相交,也就是说这两个控件有重叠;包括: 空间相交、边相交、顶点相交
T TYZhang Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #2 用两个控件的clientrect来用这个函数IntersectRect来判断是否有相交。
M mstar Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #3 TYZhang 太厉害了,什么都懂,我都没有听说过这个函数[]
T TYZhang Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #4 to mstar: 谢谢捧场!以前在做贴图是用过。
N netarct Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #5 没用过这两个函数,佩服:) 不过我想可以转换成数学方法做。分别记录两个panel的左上角(x1,y1),(x3,y3),左下角(x2,y2),(x4,y4),然后以第一个panel的坐标为基准,比较坐标就行了吧。
没用过这两个函数,佩服:) 不过我想可以转换成数学方法做。分别记录两个panel的左上角(x1,y1),(x3,y3),左下角(x2,y2),(x4,y4),然后以第一个panel的坐标为基准,比较坐标就行了吧。
Y yostgxf Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #6 呵呵,学习。 否则我只会用 Panel1.BoundsRect和ptInRect。
Y yostgxf Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #7 老兄,我刚才测试了一下,用clientrect不行的!!! 要用两个控件的BoundsRect和IntersectRect函数 Unit Types function IntersectRect(out Rect: TRect; const R1, R2: TRect): Boolean;
老兄,我刚才测试了一下,用clientrect不行的!!! 要用两个控件的BoundsRect和IntersectRect函数 Unit Types function IntersectRect(out Rect: TRect; const R1, R2: TRect): Boolean;
T TYZhang Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #8 to yostgxf: 老兄说得有理。用ClientRect确实不对。[^]
Y yostgxf Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #10 不是的,ClientRect.left和ClientRect.top永远为零 ClientRect.Right和ClientRect.Bottom是控件的宽度和高度
N nsj Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #11 yostgxf说的有道理,可是我如何判断是内部相交还是边相交或则顶点相交呢?
Y yostgxf Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #12 你的内部相交是包含? 边相交和顶点相交是什么?是。。(不好画)
Y yostgxf Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #13 function IntersectRect(out Rect: TRect; const R1, R2: TRect): Boolean; 1。内部相交(Rect=R1 或 Rect=R2) 2。边相交(否则,Rect的任一顶点不是R1 或R2的顶点) 3。顶点相交(否则,Rect的某一顶点是R1 或R2的顶点) 我的理解对吗?
function IntersectRect(out Rect: TRect; const R1, R2: TRect): Boolean; 1。内部相交(Rect=R1 或 Rect=R2) 2。边相交(否则,Rect的任一顶点不是R1 或R2的顶点) 3。顶点相交(否则,Rect的某一顶点是R1 或R2的顶点) 我的理解对吗?
T TYZhang Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #14 判断返回的矩形: 1、顶点相交:返回的矩形宽=0 且 高=0; 2、边相交:返回的矩形的宽=0 或 高=0; 3、内相交:返回的矩形=原先的一个矩形; 4、否则是普通相交。
N nsj Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #15 内部就是除顶点和四条边之外的panel空间;内部相交也就是说rect2相交于rect1的除顶点和四条边之外的panel空间;边相交就是rect1和rect2在某边重合;点相交就是rect1和rect2在某点重合
内部就是除顶点和四条边之外的panel空间;内部相交也就是说rect2相交于rect1的除顶点和四条边之外的panel空间;边相交就是rect1和rect2在某边重合;点相交就是rect1和rect2在某点重合
Y yostgxf Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #16 2,3还是有问题 2。边相交(否则,Rect的相连的二个顶点不是R1 或R2的顶点)//如果是不行 3。顶点相交(否则,Rect的相对的二个顶点是/不是R1 或R2的顶点)
Y yostgxf Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #17 我理解对了的,并且所有情况都考虑了。 可是实现起来有点复杂。再考虑优化一下
Y yostgxf Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #18 这样,换个思路!这样实现可能方便一些 function IntersectRect(out Rect: TRect; const R1, R2: TRect): Boolean; 1。内部相交(Rect=R1 或 Rect=R2) 否则再用ptInRect 2。边相交或交叉相交(二个顶点或0个顶点在另一个Rect内) 3。顶点相交(一个顶点在另一个Rect内)
这样,换个思路!这样实现可能方便一些 function IntersectRect(out Rect: TRect; const R1, R2: TRect): Boolean; 1。内部相交(Rect=R1 或 Rect=R2) 否则再用ptInRect 2。边相交或交叉相交(二个顶点或0个顶点在另一个Rect内) 3。顶点相交(一个顶点在另一个Rect内)
T TYZhang Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #19 to yostgxf: 你的2、3可否这样优化: 1、顶点相交:返回的矩形Rect 宽=0 且 高=0; 2、边相交:返回的矩形Rect 宽=0 或 高=0; if (Rect.Left=Rect.Right)and(Rect.Top=Rect.Bottom) then //点相交 else if (Rect.Left=Rect.Right)or(Rect.Top=Rect.Bottom) then //边相交 else ....
to yostgxf: 你的2、3可否这样优化: 1、顶点相交:返回的矩形Rect 宽=0 且 高=0; 2、边相交:返回的矩形Rect 宽=0 或 高=0; if (Rect.Left=Rect.Right)and(Rect.Top=Rect.Bottom) then //点相交 else if (Rect.Left=Rect.Right)or(Rect.Top=Rect.Bottom) then //边相交 else ....
Y yostgxf Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-14 #20 to TYZhang: 我估计你理解错了,他的顶点相交并不是顶点相接。边相交同理