-1

CSharpプロジェクトに2つのオブジェクトがあり、長方形を表示します。次に、あるオブジェクトが別のオブジェクトと交差するかどうかを計算します。オブジェクトは回転できません。

私は次の方法を持っています:

getX();
getY();
getWidth();
getHeight();
4

1 に答える 1

2

これ技術的には他の質問の複製ですが、そこに投稿されたものよりも洗練された解決策を提案します。

私がそれを見る方法は、バウンディングボックスの観点からです。バウンディングボックスが高さの合計よりも短く、幅の合計よりも細い場合、それらは交差する必要があります。

// assume we have a class with a constructor like so...
class Rect
{
    ...
    void Rect(int top, int left, int bottom, int right) { ... }
    ...
}

...

private Rect GetBoundingRect(Rect r1, Rect r2)
{
    int left = min(r1.getX(), r2.getX());
    int right = max(r1.getX()+r1.getWidth(), r2.getX()+r2.getWidth());
    int top = min(r1.getY(), r2.getY());
    int bottom = max(r1.getY()+r1.getHeight(), r2.getY()+r2.getHeight());
    return new Rect( top, left, bottom, right );
}

private bool CheckIfIntersect(Rect r1, Rect r2)
{
    Rect bound = GetBoundingRect(r1,r2);
    return (bound.getWidth() < r1.getWidth() + r2.getWidth()) &&
           (bound.getHeight() < r1.getHeight() + r2.getHeight());
}
于 2010-12-04T18:32:00.260 に答える