| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование игр, графики и искусственного интеллекта > Безгранична карта |
| Автор: Gold Dragon 19.12.2005, 09:42 |
| Планирую один проектик, в котором будет "карта местности". Проблем нет, но чем больше участников, тем больше должна быть карта. Вопрос в следующем: как можно построить карту, которая теоретически не будет иметь границ и как определять на ней координаты? |
| Автор: Empirik 19.12.2005, 10:09 |
| Есть два варианта: либо генерируешь карту согласно какой либо функции, которая тебе возвращает трехмерные координаты. Идешь по данной функции с заданным шагом по x и по y. Второй вариант, если карта уже есть то подгружаешь только те области которые ближе всего к пользователю. И выгружаешь из памяти те сектора которые уже не нужны, разумеется предварительно уже готовую карту нужно разбить на сектора самому, либо согласно алгоритму. А так с бесконечностью могут возьникнуть проблемы, так как все типы используемые в нутри программы имеют максимальные значения и за них ты ни как не выйдешь |
| Автор: CrashedZero 19.12.2005, 10:29 |
| Проще всего генерировать карту на ходу, исходя из кол - ва "живущих" на этой карте. Генерировать либо случайным образом, либо по картам, либо ещё как - то. |
| Автор: Empirik 19.12.2005, 11:54 | ||
Тут ты прав, я просто не внимательно прочитал вопрос. Проще генерировать карту из отдельных маленьких кусочков, а как выбирать эти кусочке выбирать тебе. |
| Автор: Gold Dragon 19.12.2005, 13:26 |
| допустим - есть первый человек. У него сгенерилась карта 11х11 - если появляется новый человек или первый человек доходит до границы, то генериться рядом ещё одна карта 11х11 - если ширина (длина) достигает N, то генериться карта 11х11, но следующего уровня В конечном итоге, получается что с карты, грубо говоря, можно уйти в 4 стороны. Но с каждым уровнем их количество увеличивается на 4 и как тогда их нумеровать (считать, учитыват, ориентироваться в них)? вот картинка моего видения |
| Автор: Empirik 20.12.2005, 09:37 | ||
Карту, которая была изначальной можно считать за 0:0, если у тебя карта еще трехмерная то её можно считать за 0:0:0 |
| Автор: Gold Dragon 20.12.2005, 10:30 |
| примерно понял если будут ещё варианты, буду ждать с нетерпением |
| Автор: AntonSaburov 20.12.2005, 13:53 |
| А нельзя сделать карты в виде шарика (Земля) ? |
| Автор: DENNN 20.12.2005, 15:57 | ||
В этом случае неминуемо возникнет проблема с выбором оптимальной проекции: шарик он круглый, а карты плоские. |
| Автор: Gold Dragon 20.12.2005, 16:51 | ||
|
| Автор: DENNN 20.12.2005, 16:59 | ||
Разные шарики тут не причем. Проблема в том, что ты проецируешь плоский чертеж на кривую поверхность. Попробуй в уме начни раскладывать карты на поверхности шарика: одна-к-одной, одна-к-одной, как кирпичики. Вдоль экватора все будет замечательно, т.к. погрешности незначительны. Но если ты наченшь двигаться к полюсу, то тут начнутся всяческие накладки. Возможно автору это совсем не критично, но проблема выбора проекции карты как таковая есть. |
| Автор: Gold Dragon 20.12.2005, 20:12 |
| вообще-то у меня две мысли.. Это "бесконечная" карта (одна земля) и "шарики и перходами (грубо говоря вселенная). Пока остановился на первой... хотя вторая заманчивее для игрушки |
| Автор: mr.DUDA 21.12.2005, 16:09 |
| DENNN, можно сферу вытянуть из куба. Разбиваем каждую грань на NxN квадратиков одинакового размера и вытягиваем грани так, чтобы получилась сфера. С развёрткой куба работать достаточно просто, а искажения проявляются только у рёбер куба. |
| Автор: DENNN 21.12.2005, 16:37 |
| mr.DUDA Это не причем. Я говрил о проблемах вычисления координат соседней точки, если она попадает на соседнюю карту. |
| Автор: mr.DUDA 21.12.2005, 17:08 | ||
А я о том, что если карты представлять себе как квадратики на гранях куба, никаких проблем с переходами между картами не будет. Координата точки слагается из номера грани, номера квадратика на грани, и позиции по x и y внутри квадратика грани. |
| Автор: DENNN 21.12.2005, 18:13 |
| проехали. |
| Автор: mr.DUDA 22.12.2005, 15:07 |
| но как вариант, "шарик" всё-таки катит, а ? |
| Автор: Gold Dragon 22.12.2005, 15:51 |
| Я вот тут подумал... а почему нельзя на шарик наложить карту... а координаты градусы широт и долготы |
| Автор: DENNN 22.12.2005, 16:19 | ||||
Да можно все. Я вам об искажениях твержу. Широта/долгота - это один из видов математической проекции. mr.DUDA, попробуй в своем примере сделать к граничной точке на карте по горизонтальной координате +1. ТЫ предлаагешь переместиться на соседний лист. Так вот на экваторе все именно так (ну или почти, т.к. погрешности малы). А тепереь тоже самое, но если лист карты находится близко к полюсу. Намек 1: количество карт "по горизонтали" на экваторе не то же самое, что возле полюса Намек 2: топографические карты не случайно делают в виде трапеции Намек 3: шарик - он круглый |
| Автор: Gold Dragon 22.12.2005, 16:58 |
| DENNN ну а если сдвигать не на +1, а на 1 градус (минуту,секунду) |
| Автор: DENNN 22.12.2005, 17:17 |
| В этом случае немного усложняется формула расчета нужного квадрата карты по сферическим координатам. |
| Автор: Gold Dragon 23.12.2005, 09:14 |
| ладно, это вопрос для другого топика... с бесконечной картой я вроде разобрался |
| Автор: mr.DUDA 23.12.2005, 13:37 | ||
Отвечаю скриншотами: вид спереди: http://www.g-sharp.net/images/shots_for_dennn/1.jpg 45 градусов восточной долготы, стык двух граней куба http://www.g-sharp.net/images/shots_for_dennn/2.jpg перемещаюсь севернее, вижу стык трёх граней куба http://www.g-sharp.net/images/shots_for_dennn/3.jpg смотрю сверху на северный полюс: http://www.g-sharp.net/images/shots_for_dennn/4.jpg В чём сложность перейти с одного квадратного сэмпла на другой? |
| Автор: DENNN 23.12.2005, 13:54 | ||
Смотрим на северный полюс и пытаемся написать форумлу, по которой нужно нати координы на соседней карте при переходе по некоторому вектору с предыдущей карты. Коорддинаты должны быть в СК карты в виде (X,Y) |
| Автор: mr.DUDA 23.12.2005, 14:23 |
| вот правила перехода: 1) если соседние карты находятся на одной грани куба, то проблем нету 1) если на разных, то на каждой грани куба своя система координат (Xmap;Ymap) 2) при переходе с одной грани куба на другую, текущие координаты трансформируются исходя из систем координат двух граней куба |
| Автор: DENNN 23.12.2005, 15:51 |
| Мы говорим о разных вещах. Ты исходишь из того, что квадраты на сфере располагаются "стык-в-стык" и при этом остаются квадратами. Я же веду речь о тех искажениях, которые описываются в учебниках по математической картографии Более того, еще немного и мы откдлонимся от темы топика. Так как для выполнения геометрических построений на поверхности шара используются правила сферической геометрии, а не евклидовой (классической школьной). |
| Автор: mr.DUDA 23.12.2005, 15:54 |
| OK, согласен, и вправду пошёл оффтоп |
| Автор: Gold Dragon 23.12.2005, 16:12 | ||
|
| Автор: mr.DUDA 23.12.2005, 16:29 |
| Может, тему открыть, "сферы в 3D", пообсуждаем ? |
| Автор: DENNN 23.12.2005, 18:13 |
| Ну раз интересно, тогда сакжите мне каждый, что будет если нанести изображение линии на поверхность сферы. Подумали? Неважно, что mr.DUDA сказал "прямая" На самом деле, чтоб избежать путаницы необходимо четко различать понятия линия на поверхности шара и изображение этого случая. Если подходить досконально, то определение понятия "прямая" на криволинейной поверхности не столь очевидно, как для плоскости. Для того чтоб оценить важность этого факта можно вспомнить о том, что в авиации существуют термины ортодромия и локсодромия. Мы все привыкли считать, что прямая - это кротчайшее расстояние между 2-мя точками на плоскости. Как выглядит кратчайшее расстояние между двумя точками на поверхности сферы? ТОлько чур не подглядывать. ПОдумали? Правильный ответ: дуга. Если посмотреть по карте маршурт аэробуса, к примеру, из Пекина в Европу, то увидим большую кривую, поднимающуюся на серные Российские территории. Говорят, что самолет летит по ортодромии - кратчайшему в данном случае расстоянию в пространстве между двумя точками. В этом примере необходимо учитывать, что карта может быть также состваленна в разных проекциях. Сферическая геометрия - раздел геометрии, работающий со сферическими поверхностями. К примеру типипчная задача: чему будет равна сумма углов в равностороннем треугольнике, который изображен на поверхности сферы? Понимание вышеприведенных особенностей приводит нас и к пониманию необходиомсти определения проекции на сферу как таковой. То есть, правил, по которым выполняется отображение на плоскости объектов, находящихся на сфере (в частном случае на поверхности Земли). Различают следующие виды проекций: равноугольные (Mercator)- сохраняются угловые соотношения и конфигурация фигур за счет искажения их площадей равновеликие (Lambert) - сохраняются соотношения площадей фигур за счет искажения их формы. Искажения не равномерны и как правило особенно сильные по краям карты. равнопромежуточные - с равным расстоянием между определенными линиями (параллелями или меридианами) во всех частях карты произвольные - проекции, со специально подобраныыми искажениями для некотрой задачи. |
| Автор: mr.DUDA 23.12.2005, 18:30 |
| Это всё интересно. У меня тогда такой вопрос. Какую проекцию выбрать для решаемой мною задачи, как то: расчёт множества точек поверхности сферы, попадающих в область, ограниченную квадратом на поверхности сферы? Центр квадрата может последовательно перемещаться по поверхности сферы в любом направлении на небольшую величину, при этом необходимо пересчитывать не всё множество точек, а лишь те которые попали в него с последнего перемещения. Как вообще решается подобная задача? Лично я ничего лучшего, чем представить сферу как "растянутый" куб и разбить множество на подмножества на каждой грани, не придумал. Тогда можно каждое подмножество рассматривать как прямоугольную область точек на грани куба, и при сдвиге ограничивающей множество фигуры определять сдвиг каждой прямоугольной области, что достаточно простая тривиальная задача. |
| Автор: DENNN 27.12.2005, 15:20 |
| Переформулируй задачу. В том виде как она есть сейчас разбиение на кавдраты, ИМХО, вообще не требуется. Рассматриваешь сферические координаты как пара чисел (широта, долгота). Квадрат задается парой его углов. |
| Автор: mr.DUDA 27.12.2005, 16:35 | ||
Динамическое построение меша, который представляет собой участок поверхности планеты. Участок поверхности задаётся вектором направления на камеру и угловым размером. |
| Автор: DENNN 28.12.2005, 12:20 |
| В этом случае проблемы проекции для тебя, ИМХО, не актуалны. Т.к., фактически, задачи "покрыть весь шар квадратами" не стоит. А необходимо лишь выбрать трапецевидные, описываемые широтой и долготой. |