解決しようとしているアルゴリズムに問題があります。衝突をチェックしようとしているポイントのリストがあります。おそらくいくつかのピタゴラスを使用する一般的な考えがありますが、私の主な問題はアルゴリズムの効率です。 1つの軸でのみ交差するかどうかを確認する必要があるため、ポイント(0,100)に長方形があり、ポイント(300、100)に長方形があるとしましょう。両方ともy = 100であるため、アプリではそれらを決定します衝突しますが、長方形のいずれかが残りの長方形と衝突するかどうかを確認するにはどうすればよいですか?
私の最初の試みは、新しい四角形が残りの四角形と衝突する場合に追加する各四角形のチェックをループすることでしたが、間違っていると思います.100個の四角形がある場合、最初の四角形が他の99個と衝突することを確認する必要があります、残りの部分と衝突する場合はそれぞれ。
ループが指数関数的に増加すると確信しているので、誰かがチェックする最善の効率的な方法を正しい方向に向けてください、ありがとう!
@John Phu Nguyen関数を使用して22-oct-13を編集
var events = [ {start: 30, end: 150}, {start: 540, end: 600}, {start: 560, end: 620}, {start: 610, end: 670} ];
//each start and end props are y coordinates, basically where the rect start and ends
function layOutDay(events) {
//console.log(events);
var events_container = document.querySelector('.events-col');
var frag = document.createDocumentFragment();
for(var i=0; i<events.length; i++){
//console.log(events[i].start);
var top = events[i].start;
var bottom = events[i].end-events[i].start;
var event = createEventDOM();
var gutter = event.querySelector('.gutter');
event.style.top = top + 'px';
event.style.height = gutter.style.height = bottom + 'px';
if(y_coords.indexOf(top) === -1 && y_coords.indexOf(bottom) === -1){
y_coords.push(top);
y_coords.push(bottom);
y_coords.sort();
event.style.left = '10px';
console.log('NO collision', top, bottom);
}else{
console.log('collision', top, bottom);
event.style.width = '250px';
event.style.left = '220px';
}
frag.appendChild(event);
}
events_container.appendChild(frag);
}
関数を実行すると、2つの四角形が衝突しましたが、2つではなく3つあります。x軸で四角形を隣り合わせに移動するために、誰が誰と衝突しているかを知る必要があります!
ここに私がやろうとしていることのスクリーンショットがあります
おそらく微調整ですが、見つかりません。助けていただければ幸いです。ありがとう!!!