基本上我想要做的就是这里说明的:
我从A和B开始,然后B符合A以创建C。
这个想法是,给定TLBR矩形A,B,make C
我还需要知道它是否产生一个空矩形(A在案例之外的B)。
我尝试了这个,但它没有做我想要的事情:
if(clipRect.getLeft() > rect.getLeft())
L = clipRect.getLeft();
else
L = rect.getLeft();
if(clipRect.getRight() < rect.getRight())
R = clipRect.getRight();
else
R = rect.getRight();
if(clipRect.getBottom() > rect.getBottom())
B = clipRect.getBottom();
else
B = rect.getBottom();
if(clipRect.getTop() < rect.getTop())
T = clipRect.getTop();
else
T = rect.getTop();
if(L < R && B < T)
{
clipRect = AguiRectangle(0,0,0,0);
}
else
{
clipRect = AguiRectangle::fromTLBR(T,L,B,R);
}
由于
答案 0 :(得分:3)
在最终条件中,您似乎错误地检查交叉矩形是否为空。
您检查L < R && B < T
,但似乎空矩形的条件应为:
L > R || B < T
。
顺便说一句,您可以使用Min
和Max
函数使代码更简单易读。你有很多这种模式:
if (x < y)
a = x;
else
a = y;
可以简单地写成
a = Min(x, y);
修改强>
另一个错误是你采取最大底部和最小顶部。您应该采用最小底部和最大顶部。 (假设矩形对应于屏幕坐标,其中顶部实际上具有较低的 y 值。
答案 1 :(得分:1)
逻辑上,这是两个不同的问题。我先写一个 is_intersected()函数,返回一个合适的布尔值。
如果rects相交,我会执行类似于以下伪代码的剪辑操作:
C.left.x = max(A.left.x, B.left.x);
C.right.x = min(A.right.x, B.right.x);
C.left.y = max(A.left.y, B.left.y);
C.right.y = min(A.right.y, B.right.y);