Когда вы наносите на карту поверхность сферы с плитками, как вы можете справиться с полярным искажением?

24

Легко иметь дело с тем, как локации взаимодействуют на чистой декартовой сетке. Это просто ванильная математика. И вы можете просто игнорировать геометрию поверхности сферы, если хотите просто обрезать полюса или что-то в этом роде. Но я продолжаю придумывать идеи для игр, где полярное пространство имеет значение. Геокодированные ARG и глобальные roguelikes и прочее.

Мне нужны квадратные (иш?) Локации - в любом случае разумно представленные квадратными плитками одинакового размера по всему земному шару.

Это должно быть решенной проблемой, верно?

Каковы решения?

ETA:

На экваторе - и если предположить, что ваши квадратные местоположения достаточно малы, это достаточно близко к правде, что вы можете получить один квадрат в строках к северу и югу от наиболее экваториального ряда. И вам, вероятно, это сойдет с рук, просто размахивая рукой до 45 градусов или около того. Но в конечном итоге вам нужно иметь меньше квадратов в окружном ряду полюсов. Если я уменьшу длину строки на единицу и сместу квадраты на 1/2, тогда они будут похожи на гексы, и кодирование будет относительно легко отслеживать соединения. Но по мере того, как вы получаете поул, это становится все более и более экстремальным.

Проецирование поверхности мира на поверхность куба заманчиво. Но я подумал, что должны быть более элегантные решения, которые уже используются.

Если бы я сделал кубик (не анализируя его дальше с помощью геодезии), есть ли плюсы и минусы, связанные с размещением полюса в центре грани или в вершине трех сторон?

clweeks
источник
1
Не могли бы вы уточнить, что вы подразумеваете под «квадрат (иш)»? Насколько квадратный "квадрат (иш)"?
Стив Х

Ответы:

3

Я думаю, что вы ищете геодезическую сетку . Многие люди приближают землю к кубу:

Большинство картографических проблем исчезнет на многогранной Земле

Карлос А. Фурути имеет много карт земли, которые складываются в куб

Вас также может заинтересовать квинчунциальная проекция Пирса, которая отображает всю Землю на один или два квадрата.

Икосаэдр (карта Dymaxion; «Каков наилучший способ пикселизации сферы?» ) Дает немного меньше искажений, но более сложен.

Дэвид Кэри
источник
9

Я всегда хотел увидеть игру, в которой сферическая карта использовала какой-то обычный многогранник вместо того, чтобы играть в мир на торе. Эта техника называется картой Dymaxion . (источник: grunch.net )альтернативный текст         

Я бы порекомендовал икосаэдр . Поместите текущий треугольник так, чтобы он выровнялся по одному краю квадрата. Когда игрок отходит от треугольника, поднимите следующий треугольник и снова сопоставьте его. Координаты игрока затем будут переназначены в новый раздел. Таким образом, каждый раздел вашей карты имеет свою собственную систему координат. Также вам нужно нарисовать фон для 3 смежных и 9 полуприлегающих секций. Я не думаю, что пользователь сможет определить, как это реализовано, если все сделано хорошо.

Вот пример того, как это может работать.

Конечно, после прочтения этого вы, вероятно, будете использовать классическую карту тора, и я буду ждать, чтобы увидеть настоящую многогранную вселенную.

deft_code
источник
Я не буду использовать тор. Я мог бы использовать цилиндр, как в играх Civ. Но, учитывая отсутствие блестящих решений, я серьезно склоняюсь к кубу. Куб - это многогранник! :)
clweeks
5

Если вы создаете сферу с использованием геодезической базы, полярная область обрабатывается не иначе, как любая другая область с точки зрения расстояния между вершинами, что облегчает равномерное УФ-картирование.

Большинство приложений моделирования позволяют вам создавать сферный примитив, используя геодезический дизайн.

Стив Н
источник
Проблема в том, что в этом случае вы получите бриллианты вместо квадратов, а это не то, чего хотел ОП.
Корнел Киселевич
Если я что-то упускаю, это не дает мне регионы, которые легче координировать, отображать и связывать ... не так ли?
clweeks
Геодезический кажется мне подходящим способом, не могу придумать никаких других вариантов регулярного подразделения. Если вам действительно нужны квадратные области, вы можете создать квадратную область с центром в центре треугольника, даже если он перекрывается с другими плитками. Для достаточно больших сфер (и достаточно маленьких треугольников) смещение между квадратными областями и смежными гранями треугольника будет незначительным. Это должно сохранить преимущество возможности описывать локальные (т.е. одинаковые квадратные) взаимодействия в одной и той же системе координат, нет?
MrCranky
Я думаю, что есть некоторые геодезические формы, которые могут дать приблизительные квадраты, если ДЕЙСТВИТЕЛЬНО необходимы.
спидер
Вы получаете бриллианты вместо квадратов, но это должно быть довольно легко сделать преобразование, чтобы исправить его. Поляки не гарантированы.
ChrisE
5

Невозможно «отобразить» сферу с помощью квадратов (или прямоугольников) и объединить их в «общие» вершины.

Тем не менее, будет ли возможно сформировать «локальное представление» по требованию? Проблемное пространство на самом деле не указано в вопросе, но если бы я работал над чем-то, где я хотел видеть город, но хотел иметь возможность вращать мир, я мог бы временно просто отобразить сетку на «достаточно плоский» участок мир. Источник сетки будет где бы ни находился ваш местный центр, а нормаль в этой точке соответствует нормали поверхности планеты.

Затем, когда кто-то выходит из сетки, новый генерируется по требованию.

Это может или не может работать для OP, но для некоторых это может быть полезно.

штрих-кот-бэнг
источник
4

Возьмем куб с расстоянием между вершинами и центром куба, равным желаемому радиусу. У вас есть сфера из 6 квадов.

Теперь на каждом шаге возьмите каждый четырехугольник, разделите его на 4 и переместите новые 5 вершин (одна в центре и 4 по краям - предупреждение, они делятся) от центра так, чтобы они понравились на желаемом радиус.

Нет, этот метод не идеален, но, по крайней мере, он более или менее равномерно распределен по сфере.

Корнел Киселевич
источник
3
Искажение на самом деле довольно серьезное: квадраты в середине лица будут около квадрата, а те, что около углов, будут сильно искажены.
JasonD
@JasonD: все равно будет лучше, чем все бриллианты. Предложите решение, которое будет менее искаженным, если вы хотите понизить голосование.
Корнел Киселевич
Ну, вы можете довольно хорошо аппроксимировать сферу с помощью геодезического деления, но я не уверен, что вижу, как это мне помогает.
clweeks
1

С dymaxion max у вас есть шестиугольники, выложенные в виде треугольников на плоской поверхности, но поскольку карта на самом деле не плоская, это пятиугольники. Если вы хотите позволить игроку сохранять свою ориентацию при прохождении через определенные участки, вам необходимо отделить карты местности от того, как они на самом деле хранятся. Для таких вещей, как здания, вы можете хранить небольшую карту прямоугольных векторов, а затем просто выполнять жесткую работу по их рисованию в любой необходимой вам ориентации.

Вам не нужно всегда придавать интерьеру внешний вид, как будто недавно произошло землетрясение, потому что я думаю, что среднестатистическому игроку не стоит даже умолкать о входе в дверь на северо-востоке, а входить в экран с ориентированной входной дверью. юг и все здание на регулярной сетке.

Хотя, если вы собираетесь просто хранить здания и такие важные объекты, вы все равно сделали всю работу для футбольного мяча. Конечный результат заключается в том, что вы сохраняете мир как неквадратный шаблон, а затем помещаете его в такую ​​сетку, где бы ни находился игрок.

Есть и другая альтернатива - если вы не дадите им все точное указание на сферу, например, если вы просто дали им компас низкой точности, чтобы сказать им, какое из четырех ортогональных направлений было ближе всего к северу, то вы могли бы уйти просто выполняя повороты на 90 градусов в любом месте, куда ходил игрок. Учитывая предполагаемый уровень графики, вам не придется беспокоиться о высоком здании, скрывающем какой-то дверной проем. До тех пор, пока они знают, находятся ли они рядом с полюсами или нет, они не должны слишком расстраиваться из-за того, что компас меняет их, если только не находящиеся там NPC не скажут им идти на северо-восток или они не попытаются перейти к определенным координатам широты и долготы. ,


источник
1

Вы задаете вопрос, который люди, которые делают карты, задавали в течение долгого времени :)

Наиболее определенно прочитайте на Map Projectsions, чтобы получить некоторые идеи и идеи, которые могут помочь. Проблема представления поверхности сферы на / с плоской 2D-плоскости была тем, о чем люди долго думали.

Короткий ответ: нет, ты не можешь этого сделать. Вот почему, когда вы смотрите на карты мира, некоторые части искажаются, а некоторые нет. Обычно это полюса, потому что большинство карт о неполярных областях.

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

Без сомнения, с квадратными плитками легко управлять, но я не думаю, что создать карту с шестигранной плиткой так сложно.

Вот старая статья от GameDev.net, которая может оказаться вам полезной. Речь идет о создании изометрических и шестиугольных плиток на сетке.

http://www.gamedev.net/reference/articles/article747.asp

Погуглив «гексагональную карту тайлинга», вы получите много хитов, а некоторые полезные нет.

Тим Холт
источник
1

Я управляю несколькими сетевыми PTZ-камерами Sony, модель SNC-RX570N, для отслеживания движущихся объектов в небе и триангуляции для получения истинных 3D-треков. Одним из аспектов первоначальной настройки является определение необслуживаемых «туров», для которых должны быть выбраны путевые точки. Количество таких программируемых путевых точек ограничено, и я хочу охватить все полушарие («небесную сферу») от горизонта до зенита, не оставляя пробелов.

Поэтому я задал себе вопрос: «Какое минимальное количество путевых точек мне нужно для полного охвата (без пробелов)?». Я обнаружил, что на самом деле я не могу полностью понять это.

Камера имеет бесконечное панорамирование (360 градусов) и наклон 0-90 градусов, поэтому теоретически можно добиться полного охвата. Дисплей камеры, предназначенный для использования на компьютере, имеет прямоугольное соотношение сторон 4: 3. Грубое горизонтальное поле зрения при 1-кратном увеличении составляет 58 градусов.

Существует два способа представления проблемы, в зависимости от того, какую проекцию выбрать: - прямолинейный, как Меркатор, где горизонт - это «экватор», а зенит - «полюс», расширенный на 360 градусов поворота. - полярный, при котором горизонт - это окружность круга, а зенит - центр круга.

Я считаю полярный самый простой способ подойти к проблеме. Я могу разделить круг на горизонтальные кусочки пирога размером FOV, и это говорит мне, что мне нужно 7 точек вокруг круга с этим 58 градусом H-FOV. Все идет нормально. Внутренний радиус - это просто угол наклона или V-FOV, который составляет 3/4 от 58 град. Пока все хорошо - я покрыл самые отдаленные части круга.

Но становится все сложнее, когда мы приближаемся к зениту. Я предполагаю, что одна из моих путевых точек точно в зените. Как мне наложить прямоугольник моего вида на область вокруг центра круга? Это форма прямоугольника, эллипса, подушечка для булавок или что? Как мне заполнить средний бит между красивым аккуратным внешним покрытием и этой странной формой в зените? Смущенный.

Я отмечаю, что телесный угол полусферы равен 2 * Пи-стерадианам, а угол моего поля зрения при 1-кратном увеличении равен 0,762, что означает, что мне нужно минимум 9 тесселяций. Я подозреваю, что ответ выше, чем 9.

Эндрю
источник
Как насчет этого ... Круг имеет площадь PI ^ 2 рад ^ 2, а прямоугольники FOV имеют площадь 0,75 рад ^ 2. Итак, наивно нам нужно 13,16 балла, которые должны быть округлены для полного охвата до 14 баллов. Вопрос сейчас в том, как их разместить?
Андрей
0

Если вы хотите создать всемирную сетку, я предлагаю вам разделить планету на страны или континенты, и сделать квадратную сетку, правильно центрированную на каждой. Пусть океан покроет швы.

Заратустра
источник
На самом деле, мой вопрос таков: «Поскольку я, очевидно, не могу сделать то, о чем вы думали, я действительно спрашиваю, что я мог бы сделать вместо этого?»
clweeks
Очень хорошо, отредактировано тогда.
Заратустра
Да, я думаю, что меня отвлекла другая часть. Я думал о реализации Dymaxion Map Фуллера, но работа с треугольными плитками выглядела так же, как кластер F *, так и проблема с полярной мозаикой, с которой я начинаю. Итак, с вашего предложения, если кто-то плывет из Северной Америки в северную Азию, и координаты имеют значение (может быть, они могут установить плавучие базы или что-то в этом роде), как мне соединить швы вместе? Просто придумайте таблицу соединений NA: A5 -> A: Z475?
clweeks
Похоже. Хотя, если им удастся это сделать, я бы просто дал им бонусную награду и убрал их с поля, пока они не уйдут куда-нибудь разумно.
Заратустра