Подскажите как оптимизировать данный алгоритм. Загружаю объект(у меня около 20 объектов. каждый раз вызываю функцию loadObj, приведенную ниже), каждый объект кладу в пустой массив objectsARRAY. Потом делаю двойной цикл и ищу пересечения объекта со всеми остальными. Очень мне не нравится такой подход. При этом еще нужно учитывать, что может не быть пересечений и не сравнивать объект с самим собой.
В целом мне нужно найти есть ли пересечения. Если есть пересечение, то вызывать еще один метод, где будет другая логика.
export const loadObj = path => {
this.THREE = THREE;
const container = new THREE.Object3D();
container.loaded = false;
const loader = new FBXLoader();
loader.load(
path,
object => {
container.loaded = true;
container.add(object);
objectsARRAY.push(object);
}
);
setTimeout(() => {
let next = true;
while (next) {
for (let i = 0; i < objectsARRAY.length || !next; i++) {
const currentObj = objectsARRAY[i];
const currentBB = new THREE.Box3().setFromObject(currentObj);
if (i === objectsARRAY.length - 1) {
break;
}
for (let j = i + 1; j < objectsARRAY.length; j++) {
const compareObj = objectsARRAY[j];
const compareBB = new THREE.Box3().setFromObject(compareObj);
if (currentBB.isIntersectionBox(compareBB)) {
next = false;
break;
}
}
}
}
}, 0);
return container;
};
Помогите переписать
Судя по использованию неких Box, достаточно проверять пересечение ограничивающих параллелепипедов. В таком случае стоит использовать пространственные структуры данных, например, R-tree
произвольно выбранный пример js реализации
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пожалуйста подскажите, возможно ли настроить autocomplete (точнее IntelliSense) в vscode так (или стороннее расширение ) чтобы получать автодополнение когда...
Как узнать, есть ли элемент в массиве, но без учета типа данных, те