Векторная карта местности, как реализовать?

Coffin

Новичок
вообщем если я понял , то можно так :)
таблица векторов
|id|begin|end|lenght|

begin - хнарит координаты начала вектора
end - координаты конца вектора
lenght - длинна вектора

соотвественно пишешь
1| 123.23 | 23.13 | 15
2| 23.13 | 23.56 | 40
2| 14.13 | 45.222 | 275

если маршруты какие то надо составить, то есть еще 1 таблица
id | points
id - номер маршрута
points - точки из которых он состоит
записывается примерно так
1| 1_2_3
2| 3_5_1

потом просто разделяешь точки и на карте рисуешь соотвественно по координатам этих точек маршрут :)

вообщем я профан в этом деле, но помоему действенный метод :)
 

DpoHro

Новичок
А зачем если 2 точки еще и длину?

Вообще маршруты - теже линии только отображенные особым цветом (для чего будут пометки на карте), не стоит на графах зацикливаться
 

Coffin

Новичок
Эм... как зачем ? :)
я вообще предпологал, скажем, что у тебя есть карта местности
2000х2000Px (образно выражаясь)
и координаты по пикселям указываются :)
ну а длинну по пикселям определять имхо трудно , гараздо лучше будет указать истинную длинну данной дорожки или просеки...
Вторую талицу лучше замутить, что б можно было выбирать на твоем сайте типа :
маршруты:
- для автомобилистов
- для охотников
- для рыбаков
- для мудаков :)
- и тд....
и когда по ним делаешь клик, то у тебя этот маршрут соответсвенно выделяется на карте скажем красным. Помоему удобно и наглядно поскольку, когда я-автомобилист выбираю маршрут, то меня совершенно не интерисуют другие маршруты для рыбаков и мудаков :)
Ну вообщем дело вкуса и необходимости в этом.
 

Wicked

Новичок
Coffin
я не знаю, зачем ты поведал нам свою кривоватую реализацию, особенно после поста bgm.
 

whirlwind

TDD infected, paranoid
При помощи одной пары (х,у) и только нельзя представить линию, а уравнение прямой строится по 2 точкам, либо по 1 точке и вектору, либо по 1 точке и параллельной (перпендикулярной) прямой (вобщем способов то гораздо больше 2 это точно) но никак не по одной паре ху, уважаемый...
Что же Вы такой умный товарищ, а читать не умеете. {} - это вектор. А пара {} это значит один раз {} и еще раз {}. Так понятнее?

Ничего умного и сверхнового Вы не сказали,
А Вы хотели получить диссертацию на тему "brainf*cking методы рисования кривых"? На самом деле открою Вам секрет - подобное представление используется в большинстве игр. Да, да, есть, конечно, и сплайны, но по большей части всеже обычные векторы. И знаете, всех как-то устраивает такое "неумное и не сверхновое" решение.

Но! В предложенном Вами методе (если я правильно понял) будет происходить дублирование данных при хранении ломаных полилиний, у которых одна линия является продолжением другой. То есть количество точек при вашем методе будет n*2 а при хранении массива точек полилинии n+1. Детский сад ИМХО, толкуем на тему уроков математики 5-го класса
Какие полилинии в математике 5-го класса? Вообще что такое полилинии? И какое дублирование? По вашему хранение всех точек линии не является дублированием?
 

Coffin

Новичок
Автор оригинала: Wicked
Coffin
я не знаю, зачем ты поведал нам свою кривоватую реализацию, особенно после поста bgm.
Когда узнаешь зачем, тогда и напишешь, а просто так нефига флудить не по теме.
Всегда ненавидил людей, которые не по теме флудят,а у них самоцель набить побольше постов, но пох каких у них болезнь флударестия.
Тут пол форума этим болеет, бесят нах
:mad:
 

DpoHro

Новичок
Автор оригинала: whirlwind
Что же Вы такой умный товарищ, а читать не умеете. {} - это вектор. А пара {} это значит один раз {} и еще раз {}. Так понятнее?
По этому поводу я уже прокоментировал...

А Вы хотели получить диссертацию на тему "brainf*cking методы рисования кривых"? На самом деле открою Вам секрет - подобное представление используется в большинстве игр. Да, да, есть, конечно, и сплайны, но по большей части всеже обычные векторы. И знаете, всех как-то устраивает такое "неумное и не сверхновое" решение.
Нет диссертацию не ожидал здесь увидеть, пока что меня вполне удовлетворяет диалог с другими участниками этой беседы.
Я не игру делаю. И думаю что для отрисовки линии мне будет удобнее использовать массив точек не мудря с парами точек для каждого отрезка линий... Вообще не вижу смысла в нашем споре, Вы не сумели/не хотели меня переубедить...

Какие полилинии в математике 5-го класса? Вообще что такое полилинии? И какое дублирование? По вашему хранение всех точек линии не является дублированием?
Я про способы задания прямой.
Утрировал, простите, не в 5 может чуть позже, но в школе, не принципиально.

Объясняю в чем дублирование.

Это массив точек линии где точка n и n+1 образуют отрезки этой линии
[1,1],[2,2],[3,3],[4,4],[5,5]

Это набо пар, что вы предлагаете:
([1,1],[2,2]),
([2,2],[3,3]),
([3,3],[4,4]),
([4,4],[5,5])
Несколько больше

Насколько я понимаю, игры пишут не на PHP+mySQL??? Вобщем понимаешь что лучше не раздувать объем данных...
 

DpoHro

Новичок
Да, bgm, спасибо прочитал, вник, очень реальная версия =)
Уточняю.
Если я правильно понял, то таблица географических точек это таблица состоящая из 3-х полей ID, X, Y, и любая координата чего-либо содержится в этой таблице?
Насколько быстро это? Из личного опыта, я так понял Вы этим занимелись?
 

bgm

 
DpoHro
Если я правильно понял, то таблица географических точек это таблица состоящая из 3-х полей ID, X, Y, и любая координата чего-либо содержится в этой таблице? Насколько быстро это?
Да, все точки, которые описаны в системе, заносятся в отдельную таблицу. Таблица последовательности географических точек оперирует не координатами точек, а их ID. При грамотно сконструированных запросах всё работает быстро (единственное узкое место, которое требует пристального внимания, это изменение конфигурации конкретного объекта).
 

Wicked

Новичок
Еще не которые мысли/фичи.

1) для ускорения запросов выборки всех объектов, видимых в какой то подобласти, я использовал кэширование в каждый объект координат описанного вокруг него прямоугольника. Заметно помогало.

2) у меня на карте существовало взаимно-однозначное отображение между внутренними координатами и координатами в координатах широта-долгота. Поэтому мы смогли использовать геокодер для автоматического расставления объектов по текстовому адресу. Хотя для россии это мало применимо. Но, например, могло бы оказаться полезным для использования твоих данных в других движках, например в том же гугл мэпс. К тому же, зная широту/долготу двух точек, можно по известным формулам считать расстояние.
 

bgm

 
Wicked
Еще не которые мысли/фичи.
Кстати для маршрутов можно хранить рёбра графа, а маршрут составлять уже из последовательности рёбер графа - это позволяет находить путь между двумя пунктами. Так же можно хранить привязку к некой точке, для которой знаем её географические координаты, и использовать масштаб - тогда можно спокойно оперировать "плоской", а не "выпуклой" картой.

А на "фичи" тема, конечно, богатая - простор для фантазии :)
 

DpoHro

Новичок
Мда... целый райский простор я бы сказал, хм...
Спасибо народ!

Планирую обчертить карту, выгрузить ее в удобочитаемый формат для загрузки в БД, не знаю может в XML

Беру на вооружение версию bgm
 

Wicked

Новичок
имхо лучше в базу данных. C XML придется забыть об индексах.
 

DpoHro

Новичок
Не я про то чтобы перенести из моей программы в БД я состряпал на Делфях простенькую обводилку =)

-~{}~ 06.07.06 10:26:

В продолжение темы.

Для отрисовки карты понадобится возможность отрисовки поликонов с дырками. В VC++, например, есть ф-я PolyPolygon позволяющая отрисовать бублик, есть ли что-либо подобное в PHP?
 

bgm

 
Бублик - это круг, у которого кто-то выел серединку? :)
 

DpoHro

Новичок
ОН самый =) и даже несколько серединок=) и не только бублик (он выпуклый)
 

DpoHro

Новичок
Автор оригинала: bgm
Нет, это порядковый номер точки в некоторой последовательности.
Заметь - последовательности могут быть нескольких типов:
- замкнутая фигура (элемент карты или маршрут);
- некая ломаная линия (маршрут, река, дорога и т.д.);
- точка (пункт).
Т.е. будут четыре таблицы:
- таблица типов элементов карты;
- таблица географических точек на карте;
- таблица элементов карты;
- таблица, в которой хранится последовательность географических точек для каждого элемента.

Из моей практики - работать очень удобно.
Ка мне кажется тут еще не достает таблицы слоев, одним из параметров которых должен быть параметр очереди отрисовки (порядок).

То есть, есть озёра, есть острова, но на островах тоже есть озера =) и тоже могут быть острова... То есть если обходиться только типами то может появиться по нескольку однотипных типов (озеро, озеро на острове, остров, остров на озере которое на острове :D )
Необходима таблица слоев.
bgm, как считаешь? Как ты с этим борешься в своей структуре?

-~{}~ 09.07.06 00:25:

Да и еще вопрос,
таблица где хранится последовательность точек для каждого объекта, какую структуру она имеет?
Для каждого объекта одна запись? С массивом ID точек?
ID объекта 1 | ID точки 1, ID точки 2, ID точки 3, ID точки 4, ...
Или
ID объекта 1 | ID точки 1
ID объекта 1 | ID точки 2
ID объекта 1 | ID точки 3
ID объекта 1 | ID точки 4
...
ID объекта 2 | ID точки 1

???
Кое что наобводил, приступаю к реализации :)
 
Сверху