Страница 1 из 1

Создание треугольных сеток на сфере

Добавлено: 22 апр 2014, 22:25
Игорь Белов
Хотел написать заметку, получилась статья. Возможно, это совсем не то, что нужно. Прошу посмотреть и высказаться.

====
P. S. от 07.06.2014
Статья опубликована.

Re: Создание треугольных сеток на сфере

Добавлено: 02 июн 2014, 00:32
Boris
Спасибо за статью!
У меня она вызвала интерес, т.к. я как раз сам задумался о создании покрытия из близких по форме и площади фигур. Позволю высказать свои замечания, скорее вопросы, т.к. я не все понял:
1. статья посвящена построению сетки равносторонних (или близких к ним) или разделению уже существующего треугольника?
2. в тексте есть несколько оценок "не правильности" или "не тождественности" получаемых фигур. хотелось бы понять масштабы этой неоднородности или увидеть ссылку на документ, где это расшифровывается.
3. если можно:
- то в координатах "икосаэдра" укажите дробную (или иррациональную) функцию, которая образует дробь, т.к. разные программы имеют различную внутреннюю точность расчетов.
- для фразы
Внутренний угол треугольников, сходящихся в вершине икосаэдра, равен 72° при эталонном 60°.
расшифруйте, что именно это означает, и какие последствия дает.
4.
Можно собрать тройки соседних вершин и на каждом треугольнике программой triangulate построить сетку. Однако с частью граней возникает проблема разрыва, поскольку выходные долготы находятся в диапазоне от −180° до +180°.
Если я понял правильно статью, то эту проблему вы предлагаете решить построением сетки на 4-х треугольниках, а при "размножении" результатов использовать ПО, которое учтет эту проблему?
5.
В качестве координатной системы указана «долгота/широта неопределённая»: "CoordSys Earth Projection 1, 0"
- поскольку в тексте всплывает отсылка к Mapinfo, то данное определение неточно. В Mapinfo определение "CoordSys Earth Projection 1, 0" означает "внутренняя система координат Mapinfo, выражаемая в градусах, которая начиная с версии 4.5 совпадает с WGS84".
6. пример в самом конце дан в SHP файлах :( , хотя по тексту ожидаешь его в MIF/MID, - это критично, потому как MIF можно посмотреть "глазами", что бы оценить что получилось, а SHP уже требует наличия ГИС.
7. не понял как физически получен результат icos4.zip. В том плане, что лично мне интересно получить покрытие из близких к равностороннему схожих по размеру треугольников, которые бы можно было считать плоскими на земной поверхности (для себя я бы определил из как вписанные к круг радиуса 20 км или имеющих грань меньше (20000*cos (π/6)).
Еще раз спасибо за статью.

Re: Создание треугольных сеток на сфере

Добавлено: 16 июн 2014, 23:19
Игорь Белов
Борис, спасибо за внимание к этой заметке. Постараюсь ответить на Ваши вопросы, извините за задержку.
Boris писал(а):1. статья посвящена построению сетки равносторонних (или близких к ним) или разделению уже существующего треугольника?
Разделению существующего. Предполагается расположить базовые треугольники такие, какие нам нравятся, так, как нам нравится, и затем раздробить их на мелкие.
Boris писал(а):2. в тексте есть несколько оценок "не правильности" или "не тождественности" получаемых фигур. хотелось бы понять масштабы этой неоднородности или увидеть ссылку на документ, где это расшифровывается.
На самом деле оценка одна. В постановку задачи я добавил сноску: «Эталон - равносторонний треугольник, в котором, как следствие, равны углы. Количественной мерой близости к эталону может быть, например, отношение синусов длин короткой и длинной сторон. Оно же равно отношению синусов наименьшего и наибольшего углов.»
Boris писал(а):3a. в координатах "икосаэдра" укажите дробную (или иррациональную) функцию, которая образует дробь, т.к. разные программы имеют различную внутреннюю точность расчетов.
Немного сферической тригонометрии, и вот формула для длины a ребра сферического икосаэдра:
cos a/2 = cos 60° / sin 36° = sqrt((5 + sqrt(5)) / 10)
Если две вершины совместить с полюсами, широты остальных будут
φ = ±(90° − a)
SpeedCrunch рисует для широт такие цифры:

Код: Выделить всё

90-degrees(acos(cos(radians(60))/sin(radians(36))))*2
26.56505117707798935157219372045329467120421429964522

90-degrees(acos(sqrt((5+sqrt(5))/10)))*2
26.56505117707798935157219372045329467120421429964522
Думаю, эта школьная информация будет лишней в статейке.
Boris писал(а):3b. для фразы «Внутренний угол треугольников, сходящихся в вершине икосаэдра, равен 72° при эталонном 60°.» расшифруйте, что именно это означает, и какие последствия дает.
Ну, это просто факт, связанный со вопросом №2 об искажениях. Возможно, следует для сравнения привести значения угла при вершине 90° для октаэдра и 120° для тетраэдра. Но лучше, думаю, просто удалить эту фразу. Что скажете?
Boris писал(а):4. «Можно собрать тройки соседних вершин и на каждом треугольнике программой triangulate построить сетку. Однако с частью граней возникает проблема разрыва, поскольку выходные долготы находятся в диапазоне от −180° до +180°.» Если я понял правильно статью, то эту проблему вы предлагаете решить построением сетки на 4-х треугольниках, а при "размножении" результатов использовать ПО, которое учтет эту проблему?
Именно так.
Boris писал(а):5. «В качестве координатной системы указана «долгота/широта неопределённая»: "CoordSys Earth Projection 1, 0"» - поскольку в тексте всплывает отсылка к Mapinfo, то данное определение неточно. В Mapinfo определение "CoordSys Earth Projection 1, 0" означает "внутренняя система координат Mapinfo, выражаемая в градусах, которая начиная с версии 4.5 совпадает с WGS84".
Спасибо за ценное замечание, поправил текст.
Boris писал(а):6. пример в самом конце дан в SHP файлах :( , хотя по тексту ожидаешь его в MIF/MID, - это критично, потому как MIF можно посмотреть "глазами", что бы оценить что получилось, а SHP уже требует наличия ГИС.
7. не понял как физически получен результат icos4.zip.
MIF/MID генерировались программами triangulate и shiftxy. Действительно ли примеры выходых файлов нужны в дополнение к длинным листингам? Лично мне было бы интереснее скомпилировать коды и щупать собственноручно сгенерированные MIF'ы.
А результаты получены из MIF'ов в процессе ручной сборки в QGIS, потому и в формате SHP.
Boris писал(а):лично мне интересно получить покрытие из близких к равностороннему схожих по размеру треугольников, которые бы можно было считать плоскими на земной поверхности (для себя я бы определил из как вписанные к круг радиуса 20 км или имеющих грань меньше (20000*cos (π/6)).
Утилита разбивки базового треугольника triangulate с ходу выделяет уйму памяти под вершины, рёбра и фасетки. Может быстро упереться в ограничение системы. С Вашими цифрам, вроде, должно получиться. Иначе придётся решать задачу несколько сложнее.

Re: Создание треугольных сеток на сфере

Добавлено: 17 июн 2014, 11:05
Boris
Спасибо за разъяснения и за статью.
3а: формулы с косинусами вполне достаточно
3b: да, стоит удалить.

Re: Создание треугольных сеток на сфере

Добавлено: 17 июн 2014, 20:52
Игорь Белов
Boris писал(а):3а: формулы с косинусами вполне достаточно
3b: да, стоит удалить.
Сделано, формула добавлена, предложение удалено. Спасибо!

Re: Создание треугольных сеток на сфере

Добавлено: 23 май 2018, 17:22
tsatsara
Добрый день!
Спасибо за статью.
Разъясните, пожалуйста, как получаются искажения?
(В тексте статьи и комментариев: не правильность, не тождественность фигур, отношение синусов итд)
Верно ли, что:
Точно не указать широту граней икосаэдра - 26,5... ( float ) и треугольник получается не равносторонний, а от проведения многократных математических операций ошибка растет?
Возможно ли уменьшить ошибку?

Re: Создание треугольных сеток на сфере

Добавлено: 23 май 2018, 19:23
Игорь Белов
Добрый день! Попробую ответить кратко. Если я неправильно что-то понял, уточняйте вопросы.
Разъясните, пожалуйста, как получаются искажения?
В центре грани икосаэдра искажения нулевые, в углах максимальные. В каждой вершине икосаэдра сходятся пять рёбер под углами 360° / 5 = 72°. Значит, угол бесконечно малого треугольника при этой вершине равен 72°, другие два по 54°. Соотношение длины бедра к основанию получается около 0,85.
Верно ли, что:
Точно не указать широту граней икосаэдра - 26,5... ( float ) и треугольник получается не равносторонний, от проведения многократных математических операций ошибка растет?
Необходимость использования тригонометрических функций заставляет выражать широту и долготу в радианах, так что числа, представляющие географические координаты, не только иррациональны, но и трансцендентны. Обычные компьютерные вычисления ограничены погрешностью машинного представления действительных чисел. Тем не менее, результаты можно получить с любой точностью, используя символьные вычисления и длинную арифметику.

А о накоплении ошибок при многократной бисекции я бы не беспокоился.
Возможно ли уменьшить ошибку?
Если этот вопрос связан с предыдущим, ответ положительный, если же с первым, — отрицательный.

Re: Создание треугольных сеток на сфере

Добавлено: 24 май 2018, 11:53
tsatsara
Таким образом, причина искажения - не накопление ошибки (точность вычислений),
а наличие сферического избытка (эксцесса).

Re: Создание треугольных сеток на сфере

Добавлено: 24 май 2018, 13:35
tsatsara
нет, нет, ошибка из-за того, что шесть равносторонних треугольников не разместить вокруг пяти сторон пятиугольника, если только не сделать их равнобедренными!

Re: Создание треугольных сеток на сфере

Добавлено: 24 май 2018, 21:15
Игорь Белов
tsatsara писал(а):
24 май 2018, 11:53
причина искажения - не накопление ошибки (точность вычислений), а наличие сферического избытка (эксцесса)
Верно.
tsatsara писал(а):
24 май 2018, 13:35
нет, нет, ошибка из-за того, что шесть равносторонних треугольников не разместить вокруг пяти сторон пятиугольника, если только не сделать их равнобедренными!
Это о том же, только другими словами. Бесконечно малые равносторонние треугольники укладываются вокруг общей вершины вшестером, как на плоскости. Если же размер треугольников одна двадцатая от площади сферы, они помещаются впятером, поскольку сферический избыток раздул углы до 72 градусов.