C++ 查找约束到其父对象的矩形的算法
基本上,我想做的事情如下所示: 我从A和B开始,然后B与A一致,从而创建C 这个想法是,给定TLBR矩形A,B,生成C 我还需要知道它是否会生成一个空矩形(B在一个案例之外) 我试过了,但它没有达到我的目的:C++ 查找约束到其父对象的矩形的算法,c++,clipping,C++,Clipping,基本上,我想做的事情如下所示: 我从A和B开始,然后B与A一致,从而创建C 这个想法是,给定TLBR矩形A,B,生成C 我还需要知道它是否会生成一个空矩形(B在一个案例之外) 我试过了,但它没有达到我的目的: if(clipRect.getLeft() > rect.getLeft()) L = clipRect.getLeft(); else L = rect.getLeft(); if(clipRect.getRight() < rect.getRight()
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);
}
if(clipRect.getLeft()>rect.getLeft())
L=clipRect.getLeft();
其他的
L=rect.getLeft();
if(clipRect.getRight()rect.getBottom())
B=clipRect.getBottom();
其他的
B=rect.getBottom();
if(clipRect.getTop()
谢谢在检查相交矩形是否为空的最终条件中,您似乎有一个错误 您选中了
L
,但空矩形的条件似乎应该是:
L>R|B
顺便说一下,通过使用Min
和Max
函数,您可以使代码更简单、更易于阅读。你有很多这样的模式:
if (x < y)
a = x;
else
a = y;
编辑
另一个错误是取最大底面和最小顶面。你应该选择最小底部和最大顶部。(假设矩形对应于屏幕坐标,其中顶部实际具有较低的y值。从逻辑上讲,这是两个不同的问题。我将首先编写一个is_intersected()函数,返回适当的布尔值 如果矩形相交,我将执行类似于以下伪代码的剪辑操作:
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);
仍然没有达到我希望的效果,可能是算法错了?是我的>吗?在Ran纠正后,它看起来是正确的。你能举一个失败的例子吗?
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);