Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 查找约束到其父对象的矩形的算法_C++_Clipping - Fatal编程技术网

C++ 查找约束到其父对象的矩形的算法

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()

基本上,我想做的事情如下所示:

我从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())
    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);