Как рассчитать искажение на равносторонней проекции?

28

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

Итак, как рассчитать искажение на заданной широте в равноугольной проекции 1: 45 000 000 (скажем, 2000 пикселей в ширину и 1000 пикселей в высоту)?

Я пытался выяснить этот пост и его ссылки безрезультатно: Как создать точную индикатрису Tissot?

Я не профессионал, просто очень заинтересованный любитель, поэтому, пожалуйста, сделайте это для меня!

Большое спасибо!


Спасибо за быстрые ответы! Вот длинная история; Я надеюсь, что это понятнее.

Я визуализирую / отображаю данные с использованием языка программирования Processing и хотел бы, чтобы данные 2D-отображения (шрифты и круги разного размера) выглядели неискаженными при переносе на трехмерный глобус. Данные отображаются с использованием равносторонних x, y и карты, которые я хочу использовать в качестве фонов, являются всей этой проекцией, поэтому я предполагаю, что хочу «сопоставить» это искажение (например, путем вычисления искажения по широте с использованием уравнений Тиссо?). Используя язык программирования, я могу точно исказить как текст, так и круги. Я думаю, что все, что мне нужно, это уравнения, чтобы сделать это правильно.

Вот оригинальная 2D карта данных:

введите описание изображения здесь

Когда обернуто, это выглядит искаженным, как это:

введите описание изображения здесь

Вопрос за 10 000 долларов: как сделать так, чтобы мое 2D-изображение выглядело неискаженным при переносе в трехмерную сферу?

Для справки, вот тот же вопрос, заданный по-другому на форуме Processing.

Еще раз спасибо!


Если я вас правильно понимаю, я не уверен, что хочу перепроектировать в ортографическую проекцию. Я хочу, чтобы моя 2D-карта данных была обернута в 3D-модель сферы, с которой можно взаимодействовать (например, вращаться).

Я использую программу трехмерного моделирования (Cinema 4D), чтобы обернуть сферу 2- мегабайтным изображением «синего мрамора» (равносторонняя проекция) из НАСА.

Когда обернуто, оно кажется неискаженным из всех полушарий (не только одного полушария, как было бы в ортографической проекции?), См .: все еще из трехмерной модели выше (Я полагаю, что программа моделирования выполняет для меня ортографическую проекцию, когда я вращаю объект.) Поэтому я думаю, что, если я искажу свою 2D-карту данных аналогичным образом, она также будет выглядеть неискаженной в 3D-сфере. Вот снимок, который я сделал с уравнением, которое аппроксимирует равноправное искажение. Вы заметите, что эллипсы в форме яйца на 2D-изображении выглядят как круг, когда обернуты в 3D-сферу. Точно так же эллипсы Тиссо также появляются как круги на трехмерной сфере.

Tissot Indicatrix с искаженными кругами Искаженные круги обернуты в трехмерную сферу

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

Надеюсь, что все это имеет смысл.

Возможно, вы правы, что я должен использовать программу ГИС. Я только что скачал Cartographica и посмотрю, смогу ли я это выяснить. Какие-либо предложения программного обеспечения Mac для новичка, выполняющего эту задачу?

Еще раз спасибо.

NCashew
источник
1
Вы действительно имеете в виду вычисление искажения или вы действительно хотите знать, как рассчитать саму проекцию? Возможно, вы могли бы сделать изображение доступным в Интернете, чтобы проиллюстрировать то, что вы пытаетесь достичь. Использование «соответствия» предполагает, что вы хотели бы определить, как преобразовать одно изображение в другое, указывая, что вам нужно указать, с чего вы начинаете, а также с чем вы хотите закончить.
whuber
1
Мы понимаем, что трудно описать, что вы хотите сделать, не зная жаргон, но похоже, что вы пытаетесь описать процесс, а не результат. Попробуйте начать с задачи, которую вы хотите решить, затем результаты, которые вы хотели бы, и мы постараемся заполнить пробелы :)
MerseyViking
С технической точки зрения: вы хотите перепроецировать от нужной проекции на орфографический ( «мир из космоса») проекции. Какое программное обеспечение вы можете использовать? Если у вас есть программное обеспечение ГИС или вы хотите кодировать библиотеку проекций, работа в основном сделана для вас. В противном случае вам нужно реализовать уравнения для отвода проекции равносторонней проекции (легко) и проецирования ортографической проекции (не слишком сложно, но требует некоторых навыков кодирования числовых подпрограмм).
whuber
1
Я видел этот пост, и я пытаюсь сделать то же самое. Я хочу нарисовать 2D круги, которые правильно искажаются при проецировании на 3D сферу. Мне было интересно, если вы захотите поделиться алгоритмом, который вы использовали для искажения 2D кругов? Должен был быть комментарий, а не ответ, но я написал это не в том месте. Сожалею.
HankTurbo
Вы должны нарисовать ваши данные в трехмерном пространстве, а затем спроецировать их обратно в сферу.
AngelLeliel

Ответы:

5

Как сделать так, чтобы мое 2D-изображение выглядело неискаженным при переносе в 3D-сферу?

Координаты изображения - это широта и долгота, поэтому вы можете

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

(b) Нанесите на карту текстуру на трехмерную модель сферы, используя широту в качестве координат текстуры, и отобразите эту сферу с помощью устройства визуализации трехмерной графики.

Большинство ГИС делают (а) регулярно. Чтобы проиллюстрировать (b), вот набор изображений, полученных из "плоской" карты в вопросе, взятой с точки зрения, вращающейся вокруг сферы с текстурой:

Мир из космоса

(Если вы внимательно посмотрите на крайнее правое изображение, вы увидите заметный меридиан через Тихий океан: это «шов», образованный объединением левой и правой сторон карты.)

Основная команда Mathematica для создания одного из них:

SphericalPlot3D[1, {a, 0, \[Pi]}, {b, 0, 2 \[Pi]}, Mesh -> None, 
 PlotStyle -> {Texture[i]}, TextureCoordinateFunction -> ({#5, -#4} &), 
 Lighting -> {{"Ambient", White}}, 
 Boxed -> False, Axes -> False, Background -> Black]

Это сводит исходную проблему (рисование «карт данных» на сфере) к созданию карты, на которой правильно отображаются круги. Лучшая проекция для этого - Stereographic, потому что он проецирует все круги на сфере - независимо от их размера - на круги на карте. Таким образом , одна процедура , чтобы правильно рисовать большие круги в Равноугольной проекции выступа, как показано на вопрос, является создание их в проекции Стереографической , а затем unproject их географических координат (широта, долгота). Использование (lon, lat) в качестве (x, y) декартовых координат для создания карты равносильно равноугольной проекции и поэтому подходит для наложения текстуры на сферу или для применения ортогональной проекции.


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

Whuber
источник
Спасибо за очень информативный пост! Я использую (б) в качестве своего подхода и имею под рукой правильно сгенерированную равноугольную карту, но получаю уродливые искажения полюсов при отображении карты в трехмерную сферу. Не могли бы вы помочь? gis.stackexchange.com/questions/245315/…
Sibbs Gambling
2

Предполагая, что нарисованные фигуры покрывают небольшую часть сферы, вы сможете обойтись, увеличив ширину на 1 / cos (lat) и оставив высоту в покое.

Чем больше форма и чем ближе вы подойдете к полюсам, тем хуже это будет работать.

smithkm
источник
Не могли бы вы объяснить, почему это будет работать? Похоже, что он сильно потерпит неудачу даже на небольших участках сферы у края ее рендеринга в примерах изображений.
whuber
Спасибо за редактирование; Соответственно, я убрал понижающее голосование, потому что ваш ответ мне кажется правильным и может пригодиться кому-то в будущем. Однако при рассмотрении вопроса кажется маловероятным, чтобы кто-нибудь обернул такие маленькие фигуры вокруг сферы - и когда они это сделают, им придется иметь дело с полюсами и повсюду, я полагаю.
whuber
0

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

Мое первое впечатление при чтении вашего вопроса было: «Почему вы не проектируете свои круги в конформной проекции, подобной Меркатору». Вы можете спроецировать эту карту в проекцию Меркатора и увидеть ваш круг и искажение текста, исправить все так, чтобы он выглядел красиво, и когда вы проецируете его на глобус, формы должны оставаться правильными (это определение конформной проекции).

brenth
источник
2
Это звучит как ответ для меня, поэтому я оставлю это. Но это неверно, поскольку основано на недоразумении: конформные проекции не проецируют все круги на круги. Они делают это только бесконечно. Различие огромно: например, рассмотрим, что делает Mercator с любым кругом, который вращается вокруг оси Земли. Он не может отобразить его как круг - он должен где-то его сломать. Для более подробного обсуждения этого, пожалуйста, поищите на нашем сайте Tissot .
whuber
1
«Они делают это только бесконечно мало». -> «Они делают это только для бесконечно малых».
Мартин Ф
0

Смотрите, ваша первая 2D карта не имеет нарисованных географических объектов. Добавьте их на эту карту (скажем, контур Африки) и примените искажение, о котором вы думаете, ко всему сразу. География также будет изменена, и когда вы поместите ее в сферу, это будет неправильно. Поэтому я считаю, что эта идея применить искажение не будет работать.

Вы можете обойтись в 2D, рисуя графику на маленьких 2D картах, которые имеют ограниченную площадь и приемлемые искажения. Вы можете разрезать свою 2D карту на плитки и использовать для каждой плитки свою «лучшую» проекцию.

С другой стороны, на 2D-карте легко создать точки на геодезической окружности заданного радиуса. Для этого вам нужно найти функцию, которая вычисляет широту / долготу точки на заданном расстоянии и азимут от другой точки (ищите «прямая задача Винсенти»). Получив это, вы можете создать группу эквидистантных точек на заданном расстоянии от точки, изменив азимут от 0 до 360. Создание многоугольника из этих точек в 2D требует больше работы, когда геодезическая окружность содержит полюс или пересекается левая или правая граница карты. Посмотрите, как геодезические круги могут выглядеть на плоской карте здесь .

0kcats
источник