基本上我想做的是在这里说明:
我从 A 和 B 开始,然后 B 符合 A 以创建 C。
想法是,给定 TLBR 矩形 A、B,使 C
我还需要知道它是否生成一个空矩形(B 在 A 案例之外)。
我试过了,但它没有按照我的意愿行事:
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);
}
谢谢
最佳答案
您似乎在最终条件检查相交矩形是否为空时出错。
你检查L < R && B < T
, 但似乎空矩形的条件应该是:
L > R || B < T
.
顺便说一下,您可以使用 Min
使您的代码更简单、更易于阅读。和 Max
职能。你有很多这种模式:
if (x < y)
a = x;
else
a = y;
可以简单的写成
a = Min(x, y);
编辑
另一个错误是你取了最大底部和最小顶部。您应该采用最小底部和最大顶部。 (假设矩形对应于屏幕坐标,其中顶部实际上具有较低的 y 值。
关于c++ - 查找受其父约束的矩形的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4572866/