Мені сказали, що квадратичне дерево є ідеальною структурою даних для моєї гри, але у мене виникають проблеми з розумінням того, як саме фігури працюють у квадратичних деревах.
Я роблю це в JavaScript, але я думаю, що ці питання можуть стосуватися чотирьох дерев будь-якою мовою.
Я думаю, що я здебільшого розумію, як основні (x, y) точки і вставлення точок працюють у квадратичних деревах, і що я можу це зробити на папері.
Ось JSfiddle мого експерименту з точками.
Крім одного випадку, мої тести з балами працюють як очікувалося.
Але моє плутанина починається, коли в них фігури, такі як прямокутники. Коли ви виймаєте з дерева квадратиків фігури, чи перевіряє він кожну точку фігури та в які вузли вони потрапляють? І як взагалі працюють вставки фігур, якщо вони приймають параметри (x, y, ширина, висота) для кожної форми? Чи використовує він ширину / висоту від початкової точки для обчислення інших кутових точок, які потім розподіляються у відповідні вузли? Якщо вставлена форма охоплює чотири вузли, чи дані цієї форми зберігаються у всіх чотирьох вузлах?
І коли метод пошуку приймає фігуру як параметр (x, y, ширина, висота), що насправді відбувається? Чи спочатку бачимо, до яких вузлів поділятиметься форма, якби її вставити, а потім витягнути всі об'єкти цих вузлів?
У мене є JSfiddle, що працює з фігурами , але я сильно збентежений у результатах мого тестування. Я отримую повторювані об’єкти!
Наприклад, червоний квадрат - це намальований еквівалент параметрів, які я ввожу в метод пошуку. Я б подумав, що оскільки ця червона площа охоплює всі чотири вузли, вона повинна повертати кожен предмет у квадратичному дереві! Але це не так, і у мене виникають проблеми з раціоналізацією того, що він повертає. У мене є низка інших тестів, які зараз коментуються, але ви можете відміняти коментарі та запустити їх, щоб побачити більш заплутані результати!
Як сказати, якщо я хочу повернути всі точки в квадратичному дереві, як би це зробити? Метод отримання, використовуючи форму на весь розмір меж? Наприклад, отримати (0, 0, canvas.width, canvas.height)?
Бібліотеку JavaScript QuadTree, яку я використовую, згадували різні джерела, тому я вважаю, що реальна реалізація є правильною та надійною.
Я думаю, що багато моєї плутанини може бути наслідком нерозуміння термінології квадратичного дерева. Мовляв, чому вони кажуть межі замість розмірів, коли "точка" має також параметри ширини / висоти? Це питання конвенції / короткої руки чи це абсолютно різні поняття?
Дякую за ваш час!
_stuckChildren
поле в коді. Ви також можете бачити це у зразку "вилучення елементів з межею" - він завжди виділяє червоним кольором вузли, що перетинають межі вузлів, на які ви натиснули, аж до кореневого вузла.