Трапецоидная карта — различия между версиями
Shagal (обсуждение | вклад) (→Структура данных) |
Shagal (обсуждение | вклад) |
||
| Строка 25: | Строка 25: | ||
|statement= Любой face трапецоидной карты ограничен одним или двумя вертикальными отрезками и обязательно двумя не вертикальными отрезками. | |statement= Любой face трапецоидной карты ограничен одним или двумя вертикальными отрезками и обязательно двумя не вертикальными отрезками. | ||
}} | }} | ||
| − | + | [[Файл:Trapezoidmapnavigationshagal.jpg|650px|thumb|right|навигация в трапецоидной карте]] | |
| + | |||
Именно отсюда берется название стрктуры, так как любой face либо трапеция, либо треугольник. | Именно отсюда берется название стрктуры, так как любой face либо трапеция, либо треугольник. | ||
| Строка 41: | Строка 42: | ||
Тогда <tex>\Delta_1</tex>,<tex>\Delta_2</tex> называют либо большими левыми соседями, либо меньшими. | Тогда <tex>\Delta_1</tex>,<tex>\Delta_2</tex> называют либо большими левыми соседями, либо меньшими. | ||
| − | |||
Хранить трапецоиды можно в чем угодно. Вместе с самим трапецоидом, стоит хранить leftp, rightp, top и bottom так же следует хранить соседей трапецоида. | Хранить трапецоиды можно в чем угодно. Вместе с самим трапецоидом, стоит хранить leftp, rightp, top и bottom так же следует хранить соседей трапецоида. | ||
| + | |||
| + | |||
| + | ---- | ||
| + | |||
| + | *''Поисковая структура'' | ||
| + | Поисковая структура(в дальнейшем <tex> D</tex>) предсталяет из себя ацикличный граф с одним корнем и каждому трапецоиду в структре соответствует один лист. | ||
| + | |||
| + | У каждого узла есль два ребенка и при этом узел может быть двух типов. | ||
| + | [[Файл:Trapezoidmapsearchstructureshagal.jpg|650px|thumb|right|навигация в трапецоидной карте]] | ||
| + | |||
| + | Первый тип узла - точка, соответствующая концу отрезка. | ||
| + | |||
| + | Второй тип узла - отрезок. | ||
| + | |||
| + | Во время запроса мы двигаемся по графу от его корня до момента, когда окажемся в листе, это и будет означать что точка находится внутри трапецоида. | ||
| + | |||
| + | Если мы находимся не в листе, то мы должны опрелетиться в каком из детей мы окажемся дальше. | ||
| + | |||
| + | Еcть два правила: | ||
| + | |||
| + | *Если текущий узел соответсвует вершине, то смотрим левее или провее мы находимся(проверка по x-координате). | ||
| + | |||
| + | *Если текущий узел соответствует отрезку, то смотрим выше или ниже мы находимся(проверка по y-координате). | ||
| + | |||
| + | *Плохие случаи: | ||
| + | |||
| + | Мы находимся на одной вертикале с вершиной | ||
| + | |||
| + | Мы находимся на отрезке | ||
| + | |||
| + | (Решение: молиться, или просто обрабатывать вручную.) | ||
Версия 22:14, 15 февраля 2012
Трапецоидная карта - геометрическая структура позволяющая локализоваться на площади за .
Постановка задачи
Предположим, у нас есть наши координаты, и есть карта мира. Мы можем найти по карте наше местоположение и сказать в какой области мы находимся. Области задаются отрезками. Формальная постановка задачи Есть множество отрезков на плоскости. Есть запрос (точка q), на выход подается область заданная какими-то отрезками в которой находится q.
Структура данных
- Геометрическая
У нас есть множество отрезков ограничееных оболочкой R(это не выпуклая оболочка, а просто мнимая граница плоскости за которую не вылезают отрезки)
Мы договариваемся что никакие две точки не лежат на одной вертикале(в противном случаи все еще противнее)
Трапецоидная карта множества отрезков S - это эти отрезки + из кажой точки выпущены два луча, вверх и вниз до первого пересечения с другим отрезком или с оболочкой R.
| Лемма: |
Любой face трапецоидной карты ограничен одним или двумя вертикальными отрезками и обязательно двумя не вертикальными отрезками. |
Именно отсюда берется название стрктуры, так как любой face либо трапеция, либо треугольник.
Введем обозначения для навигации по карте.
- левая граница(leftp) - точка определяющая левуюы сторону трапецоида или в случаи треугольника просто являющаяся левой вершиной.
- правая граница(rightp) - аналогично левой только справа.
- верхний отрезок(top) и нижний отрезок(bottom) - отрезки ограничивающие трапецоид сверху и снизу.
- трапецоиды называются смежными, если имеют общую вертикальную границу.
- пусть смежны и либо top() = top(), либо bottom() = bottom()
Тогда , называют либо большими левыми соседями, либо меньшими.
Хранить трапецоиды можно в чем угодно. Вместе с самим трапецоидом, стоит хранить leftp, rightp, top и bottom так же следует хранить соседей трапецоида.
- Поисковая структура
Поисковая структура(в дальнейшем ) предсталяет из себя ацикличный граф с одним корнем и каждому трапецоиду в структре соответствует один лист.
У каждого узла есль два ребенка и при этом узел может быть двух типов.
Первый тип узла - точка, соответствующая концу отрезка.
Второй тип узла - отрезок.
Во время запроса мы двигаемся по графу от его корня до момента, когда окажемся в листе, это и будет означать что точка находится внутри трапецоида.
Если мы находимся не в листе, то мы должны опрелетиться в каком из детей мы окажемся дальше.
Еcть два правила:
- Если текущий узел соответсвует вершине, то смотрим левее или провее мы находимся(проверка по x-координате).
- Если текущий узел соответствует отрезку, то смотрим выше или ниже мы находимся(проверка по y-координате).
- Плохие случаи:
Мы находимся на одной вертикале с вершиной
Мы находимся на отрезке
(Решение: молиться, или просто обрабатывать вручную.)