3

基本的に私がやりたいことはここに示されています: 代替テキスト

A と B から始めて、B を A に適合させて C を作成します。

アイデアは、TLBR 長方形 A、B が与えられた場合、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);
}

ありがとう

4

2 に答える 2

3

交差矩形が空かどうかをチェックする最終条件に誤りがあるようです。

をチェックL < R && B < Tしますが、空の四角形の条件は次のようになります。

L > R || B < T.

ところで、MinandMax関数を使用すると、コードをもう少し単純にして読みやすくすることができます。このパターンがたくさんあります:

if (x < y)
    a = x;
else
    a = y;

これは次のように簡単に書くことができます

a = Min(x, y);

編集

もう 1 つの間違いは、最大の底と最小の上部を取ることです。最小のボトムと最大のトップを取得する必要があります。(長方形が画面座標に対応すると仮定すると、実際には上部のy値が低くなります。

于 2011-01-01T01:14:44.113 に答える
1

論理的には、これらは 2 つの異なる問題です。まず、適切なブール値を返す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);
于 2011-01-01T01:41:25.463 に答える