我要解决的算法有问题,我有一个我要检查碰撞的点列表,我有一个大概的想法,可能使用了一些 pytagoras,但是我的主要问题是算法的效率,因为我需要检查矩形是否仅在一个轴上相交,假设我有一个矩形点 (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 个矩形碰撞,但是有 3 个而不是 2 个,我需要知道谁在与谁在 x 轴上相互移动矩形!
可能是一个调整,但我找不到它,非常感谢任何帮助,谢谢!!!