0

だから私はグラフィックの問題を解決しようとしています。基本的にコンテナがあります。幅 600px としましょう。そのコンテナに長方形が 1 つしかない場合 (重なり合う長方形がない場合)、その幅が使用されます。ただし、問題は、これらの長方形が重なっている場合、それに応じて幅を縮小する必要があることです。この長方形の左上と左下の y 座標が与えられます。(大きなコンテナの 60 ピクセル下から 120 ピクセル下まで)

そこで、オーバーラップが存在するかどうかをチェックし、長方形がオーバーラップする (それ自体を含む) 長方形の数をカウントするオーバーラップ アルゴリズムを作成しました。次に、コンテナーの幅を重なり合う要素の最大数で割って、小さい方の四角形の幅を取得します。

    for (i = 0; i < events.length; i++) {
        var event = events[i];
        var numCollisions = 0;  
        for (j = 0; j < events.length; j++) {
            var eventCmp = events[j];
            if (event.start <= eventCmp.start && event.end > eventCmp.start ||
                event.start < eventCmp.end && event.end >= eventCmp.end) {
            numCollisions++;   
        }
    }

しかし、これには大きな問題があることに気付きました。下のこの図を見ると、一番右の長方形に 2 つの重なり合った長方形があります。私のアルゴリズムでは、コンテナの幅/3 (長方形自体を含む) が得られますが、これは正しくありません。実際の答えは、コンテナーの幅/2 です。

ここに画像の説明を入力

したがって、問題は (この長い説明の後) 2 つの長方形が水平方向に整列しているかどうかを確認する必要があることです。私はこれについて何時間も頭を悩ませてきました。これを行う方法についてのヒントはありますか?

4

2 に答える 2

0

最も簡単な答えはdivide by 2 IF you have a collision(実際に衝突がいくつあるかは気にしないこと) です。もっと洗練されたものが必要なら、もっと洗練されたケースを見せてもらえますか?

于 2013-02-18T01:19:47.783 に答える