2012-01-04 8 views
1

私は現在collsion検出のためにこれを使用しています:アイソメ物体検出

var overlaps = (function() { 
    function getPositions(elem) { 
     var pos, width, height; 
     pos = $(elem).position(); 
     width = $(elem).width(); 
     height = $(elem).height(); 
     return [ [ pos.left, pos.left + width ], [ pos.top, pos.top + height ] ]; 
    } 

    function comparePositions(p1, p2) { 
     var r1, r2; 
     r1 = p1[0] < p2[0] ? p1 : p2; 
     r2 = p1[0] < p2[0] ? p2 : p1; 
     return r1[1] > r2[0] || r1[0] === r2[0]; 
    } 

    return function (a, b) { 
     var pos1 = getPositions(a), 
      pos2 = getPositions(b); 
     return comparePositions(pos1[0], pos2[0]) && comparePositions(pos1[1], pos2[1]); 
    }; 

})(); 

しかし、問題は、私は建物等尺画像を扱うので、あなたが現在置かないことができ、大きな空の領域があります。たとえば :
enter image description here

だから私は、お互いに、より近いそれらを配置することはできません。
私はこの問題を解決するにはどうすればよい 、

私のイメージは次のようにロードされます。

<div id='obj' name="build_6" class="build_88" style='top:584px;left:1094px;'><img src ="img/buildings/6.png" /></div> 


ありがとう、
ジェフリー

答えて

1

はおそらく、「本物の」重複検出を使用する必要がある - として、要素のサイズを比較するのではなく、バウンディングボックスまたは境界円/省略記号を使用します。

おそらく、アルゴリズムの複雑さの観点から境界円を実装するのが最も簡単です。たとえば、http://mathworld.wolfram.com/Circle-CircleIntersection.html

+0

私を助けてくれますか?私は、javascriptまたはjqueryでそれを使用する方法を理解していません –

+0

境界円に関連する詳細をどこかに格納する必要があります。簡単な方法は、それらを属性として要素に入れることだけかもしれません。次に、幅/高さなどを読み取る代わりにチェックを行うときに、属性から値を読み取り、それに基づいてチェックを行います。 –

+0

私はそれを試してみるよ –