Я просто работаю над оптимизатором 3d-сетки и достиг блока кодера. Это то, что я должен решить за час, но вместо этого я застрял весь день.
index
содержит координаты вершин треугольника, расположенные в attribute
. Если он говорит -1, -1, -1, это означает, что этот треугольник был удален и будет удален в новом индексе. Вершины могут быть разделены между треугольниками, но если на них больше нет ссылок в index
, они должны быть удалены из нового массива атрибутов, а их адреса обновлены в новом индексе.
// -1 are removed elements
const index = [
-1, -1, -1,
5, 2, 0,
2, 0, 4,
2, 5, 0,
-1, -1, -1,
];
const attribute = [
1234, 1341, 1432, // vertex 0
2123, 2531, 2121, // vertex 1
3532, 3123, 3441, // vertex 2
4112, 4311, 4122, // vertex 3
5112, 5311, 5122, // vertex 4
6112, 6311, 6122, // vertex 5
];
Кто знает, может быть, я отправлю ответ на этот вечер, но если вопрос все еще здесь, я потерпел неудачу.
Вот как должен выглядеть результат
// -1 are removed elements
const newIndex = [
// removed
3, 1, 0,
1, 0, 2,
1, 3, 0,
// removed
];
const newAttribute = [
1234, 1341, 1432, // still 0
// removed
3532, 3123, 3441, // 2 became 1
// removed
5112, 5311, 5122, // 4 became 2
6112, 6311, 6122, // 5 became 3
];
Редактировать: я только что установил песочницу с юнит-тестами https://codesandbox.io/s/reindex-array-by-array-m4llg