Вариант решения глюков с прокладкой и подсказками!
Вариант решения глюков с прокладкой и подсказками!
Предлагаю использовать алгоритм не просчета вершин на перекрестках, а принципиально другой принцип построения перекрестков:
Для всех перекрестков нужно составить несколько стандартных шаблонов правильного проезда данных перекрестков и закрепить за каждым перекрестком по одному шаблону.
Кроме этого будет не лишней возможность для пользователей - иметь возможность вручную на КПК менять эти шаблоны из списка в зависимости от изменений на перекрасках, устраиваемыми гаишниками.
При этом программа при проезде перекрестка не будет пытаться каждый раз анализировать вершины углов, а просто будет выполнять предписанный алгоритм проезда для данного конкретного перекрестка по шаблону.
Этим самым мы снижаем вычислительные нагрузки в программе, улучшаем надежность правильности прокладки маршрута, выдачи подсказок и избавляемся от системы запретов проезда.
В итоге мы получаем карту с графами на дорогах и легко корректируемыми перекрестками вместо существующей системы.
Как Вам этот вариант?
Для всех перекрестков нужно составить несколько стандартных шаблонов правильного проезда данных перекрестков и закрепить за каждым перекрестком по одному шаблону.
Кроме этого будет не лишней возможность для пользователей - иметь возможность вручную на КПК менять эти шаблоны из списка в зависимости от изменений на перекрасках, устраиваемыми гаишниками.
При этом программа при проезде перекрестка не будет пытаться каждый раз анализировать вершины углов, а просто будет выполнять предписанный алгоритм проезда для данного конкретного перекрестка по шаблону.
Этим самым мы снижаем вычислительные нагрузки в программе, улучшаем надежность правильности прокладки маршрута, выдачи подсказок и избавляемся от системы запретов проезда.
В итоге мы получаем карту с графами на дорогах и легко корректируемыми перекрестками вместо существующей системы.
Как Вам этот вариант?
HP IPAQ hx4700 + GlobalSat BC-337 (SiRF III) http://smileys.smileycentral.com/cat/new/8_22/7_6_8.gif
-
- Профессор (5 lvl)
- Сообщения: 708
- Зарегистрирован: Пт окт 10, 2003 14:25
Почему же? Нужно хранить граф маршрутов. Но это и так есть - именно по этому графу строятся маршруты.Ты предлагаешь для каждого перекрестка хранить в программе все возможные варианты его проезда + правильную подсказку для каждого варианта?
А вот шаблоны - IMHO штука безнадёжная... Не всё под них можно подогнать. Анализ на лету - гораздо более верный подход. Вопрос в том, как сделать его более точным...
WBR,
BreQwaS.
ICQ: 241785226
LJ: http://livejournal.com/users/breqwas
Hard: iPAQ hx4700, SD Kingston 1 Gb, Luch-BT
BreQwaS.
ICQ: 241785226
LJ: http://livejournal.com/users/breqwas
Hard: iPAQ hx4700, SD Kingston 1 Gb, Luch-BT
А у меня проще есть предложение (с точки зрения разработки).
Во-первых, на карте перекрестки должны быть как-либо обозначены. То есть, у вершие входа и выхода из перекрестка должен быть соответствующий признак. У ребер насколько я понимаю такой признак уже есть (коричнеывй цвет стрелок).
Дальше алгоритм такой:
1) Определить точку входа на перекресток
2) определить точку выхода из перекрестка.
3) посчитать угол между ребром перед входом на перекресток и линией, соединяющей точку входа и выхода. По этому углу мы определим правый это поворот или левый.
4) Посмотреть другие точки выхода из перекрестка. Если существует более чем одна точка выхода в том же направлении, то вычислить порядковый номер нужного выхода (для того чтобы сказать "2-й направо" например)
5) Подобрать нужную картинку для подсказки из набора что я приводил ранее (http://www.pocketgps.ru/board/viewtopic ... 569#232569)
6) Выбрать нужный звуковой файл соответсвующий картинке
Единственная сложность которую я вижу - это сложные перекрестки (Тверская застава, Таганская и т.д.), но это не проблема. Просто надо их разбить на несколько перекрестков. ТОгда подсказка будет выдаваться "по шагам", как в другим навигационных системах.
Как продолжение идее, "склеивать" подсказки типа "первый поворот направо затем возьмите левее во второй заезд".
Во-первых, на карте перекрестки должны быть как-либо обозначены. То есть, у вершие входа и выхода из перекрестка должен быть соответствующий признак. У ребер насколько я понимаю такой признак уже есть (коричнеывй цвет стрелок).
Дальше алгоритм такой:
1) Определить точку входа на перекресток
2) определить точку выхода из перекрестка.
3) посчитать угол между ребром перед входом на перекресток и линией, соединяющей точку входа и выхода. По этому углу мы определим правый это поворот или левый.
4) Посмотреть другие точки выхода из перекрестка. Если существует более чем одна точка выхода в том же направлении, то вычислить порядковый номер нужного выхода (для того чтобы сказать "2-й направо" например)
5) Подобрать нужную картинку для подсказки из набора что я приводил ранее (http://www.pocketgps.ru/board/viewtopic ... 569#232569)
6) Выбрать нужный звуковой файл соответсвующий картинке
Единственная сложность которую я вижу - это сложные перекрестки (Тверская застава, Таганская и т.д.), но это не проблема. Просто надо их разбить на несколько перекрестков. ТОгда подсказка будет выдаваться "по шагам", как в другим навигационных системах.
Как продолжение идее, "склеивать" подсказки типа "первый поворот направо затем возьмите левее во второй заезд".
А еще можно отображать на картинке-подсказке предстоящего поворота копию изображения маршрутной линии в изогнутом месте.5) Подобрать нужную картинку для подсказки из набора что я приводил ранее
HP IPAQ hx4700 + GlobalSat BC-337 (SiRF III) http://smileys.smileycentral.com/cat/new/8_22/7_6_8.gif
Угу. А если это roundabout, где если смотреть на угол между входом и выходом - будет поворот налево, а реально поворачивать нужно сначала направо, а потом ещё раз направо?3) посчитать угол между ребром перед входом на перекресток и линией, соединяющей точку входа и выхода. По этому углу мы определим правый это поворот или левый.
WBR,
BreQwaS.
ICQ: 241785226
LJ: http://livejournal.com/users/breqwas
Hard: iPAQ hx4700, SD Kingston 1 Gb, Luch-BT
BreQwaS.
ICQ: 241785226
LJ: http://livejournal.com/users/breqwas
Hard: iPAQ hx4700, SD Kingston 1 Gb, Luch-BT
roundabout - это отдельная ситуация (которую я временно вычеркнул из "алгоритма"). Если вы сходите по ссылке в первом письме - то увидите пример картинки с "раундэбаутом".BreQwaS писал(а):Угу. А если это roundabout, где если смотреть на угол между входом и выходом - будет поворот налево, а реально поворачивать нужно сначала направо, а потом ещё раз направо?3) посчитать угол между ребром перед входом на перекресток и линией, соединяющей точку входа и выхода. По этому углу мы определим правый это поворот или левый.
Подсказка должна быть простая: "n-й съезд с кругового движения".
При этом, картинок достаточно будет 4-х видов:
1) поворот направо по кругу
2) проезд по кругу прямо
3) поворот по кругу налево
4) разворот по кругу.
Выбирается наиболее подходящая картинка из условий точки входа и точки выхода.
1) Если б я работал бы в МакЦентре - я б за такую идею метнул бы в вас чем-нибудь тяжелымVarAn писал(а):А еще можно отображать на картинке-подсказке предстоящего поворота копию изображения маршрутной линии в изогнутом месте.5) Подобрать нужную картинку для подсказки из набора что я приводил ранее

2) Зачем? У нас же есть уже карта! Картинка со стрелочками предназначена для схематического обозначения маневра. Чтобы раз взглянул и все стало понятно.
Предлагаю другой алгоритм: поторопить ТомТом скорее выйти в России
все наши обсуждения здесь бесполезны....



все наши обсуждения здесь бесполезны....
Последний раз редактировалось gren Пн сен 05, 2005 16:27, всего редактировалось 1 раз.
Grenhttp://smiles.ru/coll/major/bmw.gif
iPaq 2210, CF, SD, GPS Haicom 303S
iPaq 2210, CF, SD, GPS Haicom 303S
Боюсь "отдельных ситуаций" будет многовато - вспомните московские развязки.roundabout - это отдельная ситуация (которую я временно вычеркнул из "алгоритма")
Более "читерский" вариант - когда приближается хитрая рзвязка и программа не уверена, какие давать подказки, надо говорить что-то типа "впереди сложный перекрёсток" и показывать его на картинке крупным планом - мол, рули как хочешь :)
WBR,
BreQwaS.
ICQ: 241785226
LJ: http://livejournal.com/users/breqwas
Hard: iPAQ hx4700, SD Kingston 1 Gb, Luch-BT
BreQwaS.
ICQ: 241785226
LJ: http://livejournal.com/users/breqwas
Hard: iPAQ hx4700, SD Kingston 1 Gb, Luch-BT
-
- Профессор (5 lvl)
- Сообщения: 708
- Зарегистрирован: Пт окт 10, 2003 14:25
По-моему алгоритм будет плохо обрабатывать проезд перекрестка типа "ступеньки", как в на картинке.Logout писал(а): Дальше алгоритм такой:
1) Определить точку входа на перекресток
2) определить точку выхода из перекрестка.
3) посчитать угол между ребром перед входом на перекресток и линией, соединяющей точку входа и выхода. По этому углу мы определим правый это поворот или левый.
4) Посмотреть другие точки выхода из перекрестка. Если существует более чем одна точка выхода в том же направлении, то вычислить порядковый номер нужного выхода (для того чтобы сказать "2-й направо" например)
Если я правильно понял предложенный алгоритм, подсказка будет "второй поворот налево".
Имхо в данном случае не самая подходящая подсказка ...

Нормальная подсказка будет если разбить на два и выдать связанную подсказку - "налево, потом направо".
Но встает вопрос в каких случаях разбивать, а в каких нет ...

- Вложения
-
- A.jpg (92.24 КБ) 14852 просмотра
ну почему же. Правильно скажет: "поворот налево во второй заезд". После поворота скажет "поворот направо". Что тут не так? А про связку подсказок я уже говорил.Alligator. писал(а):По-моему алгоритм будет плохо обрабатывать проезд перекрестка типа "ступеньки", как в на картинке.Logout писал(а): Дальше алгоритм такой:
1) Определить точку входа на перекресток
2) определить точку выхода из перекрестка.
3) посчитать угол между ребром перед входом на перекресток и линией, соединяющей точку входа и выхода. По этому углу мы определим правый это поворот или левый.
4) Посмотреть другие точки выхода из перекрестка. Если существует более чем одна точка выхода в том же направлении, то вычислить порядковый номер нужного выхода (для того чтобы сказать "2-й направо" например)
Если я правильно понял предложенный алгоритм, подсказка будет "второй поворот налево".
Имхо в данном случае не самая подходящая подсказка ...
Нормальная подсказка будет если разбить на два и выдать связанную подсказку - "налево, потом направо".
Но встает вопрос в каких случаях разбивать, а в каких нет ...
Правда, что-то я сомневаюсь в том, что это будет реализовано...

"Развязка" кстати, это еще один вариантBreQwaS писал(а):Боюсь "отдельных ситуаций" будет многовато - вспомните московские развязки.roundabout - это отдельная ситуация (которую я временно вычеркнул из "алгоритма")
Более "читерский" вариант - когда приближается хитрая рзвязка и программа не уверена, какие давать подказки, надо говорить что-то типа "впереди сложный перекрёсток" и показывать его на картинке крупным планом - мол, рули как хочешь

Вообще, мне на ум приходит всего четыре вида транспортных узлов:
1) перекресток
2) круговое движение
3) развязка (когда дороги пересекаются на разных уровнях)
4) сложный перекресток (Таганская пл. и т.п.). Это вручную надо разбивать на более простые перекрестки.
Что-то я сомневаюсь, что разбивка вручную - это хорошая идея :)Это вручную надо разбивать на более простые перекрестки.
WBR,
BreQwaS.
ICQ: 241785226
LJ: http://livejournal.com/users/breqwas
Hard: iPAQ hx4700, SD Kingston 1 Gb, Luch-BT
BreQwaS.
ICQ: 241785226
LJ: http://livejournal.com/users/breqwas
Hard: iPAQ hx4700, SD Kingston 1 Gb, Luch-BT