Pull to refresh

Comments 10

Весьма и весьма недурно. С нетерпением жду продолжения.

Спасибо, оно уже готовится.
К сожалению, в изначально посте поехала вёрстка и хабр съел окончание статьи. Так что для вас — небольшое продолжение есть уже сейчас :)
Спасибо за очень интересные статьи. А в какой программе вы строили майндкарту (1й скриншот в секции Баги и картинки)?
Здесь когда-то была статья-обзор разных вариантов, остановился на mindmeister.

Возможно глупый совет, но не пробовали ли вы делать минимальный размер субрегиона в RegionTree допустим 8х8 или 16х16, и делать там сплошную битовую маску? Мне кажется, это было бы эффективней и по памяти, и по времени доступа.

Я бы этот совет глупым не назвал. Пока не придумал, как можно было бы хранить битовую маску только в листьях (можно, конечно, через optional value делать), но даже если пихать её в каждый узел, получится большая экономия.
По скорости доступа при поиске коллизий точно даст выигрыш. Будут сложности при слиянии деревьев и ray'cast'е, но полагаю, оно того стоит.
Спасибо, как доберусь до оптимизаций, попробую этот подход.

Увы, это идеально ложится на языки с поддержкой tagged unions — а Unity не тот случай.
Можно попробовать так, если надо в основном проверки на "пустой-полный" (псевдокод)


interface INode {
    bool isEmpty(Coord);
}
class BigNode: INode {
    INode topleft, topright, bottomleft, bottomright;
    bool IsEmpty(Coord position) {
        var subnode = selectChildFromCoord(position);
        return subnode ? subnode.isEmpty(position) : false;
    }
}
class SmallNode: INode {
    BitMaskBlob bitmask;
    bool isEmpty(Coord position) {
        return getBitFromPosition(position) != 0;
    }
}
Да, как вариант.
Мне при разработке (подкапотные дела C# знаю плохо, это не c++, где с наследованием всё яснее), было неясно — если я буду использовать наследование (возможно, с виртуальными функциями), насколько это скажется на производительности по сравнению с «плоскими» узлами.
Sign up to leave a comment.

Articles