Данная тема предназначена для ознакомления с интерполяционными методами применительно к результатам спутниковых наблюдений. Для того, чтобы не связываться со сложным и неустойчивым аффинным преобразованием из одного треугольника в другой зачастую применяют более простую технику: "закрашивание" треугольника разностями (или интерполяция разностей). Здесь имеется очень хорошая визуальная аналогия с непосредственным закрашиванием треугольников трёхкомпонентными цветами в компьютерной графике: Только в геодезии в качестве цветов выступают разности координат вершин двух "похожих" треугольников. Рассматривать окончательный оптимизированный алгоритм не буду, он ухудшает понимание действия, рассматривать буду только базовый алгоритм. Имеются 3 исходных пункта {A, B, C} с координатами и эти же пункты в спутниковой съёмке {a, b, c}. Помимо них внутри треугольника содержится множество съёмочных точек {m}. Для треугольника A-B-C известны разности координат исходных и съёмочных: d{A,B,C}{x,y,h} = {A,B,C}{x,y,h} -{a,b,c}{x,y,h} Для "закрашивания" (интерполяции/экстраполяции) точки m{x,y,h} строим дополнительную прямую, например из точки a через точку m на линию b-c, получив на ней вспомогательную точку s. PS: Здесь есть "слабое" место - это когда линия a-m параллельна линии b-c. В этом случае следует поменять расстановку точек {a,b,c}. В зависимости от того, попадает точка s{x,y,z} в промежуток b-c, точка m либо может принадлежать треугольнику, либо точно не принадлежит. Ежели точка m находится ближе точки s к точке a и выполняется предыдущее условие, то точка m находится внутри треугольника, иначе точно не находится внутри. Для точки s{x,y,z} по линии b-c линейной интерполяцией/экстраполяцией от точек {b и c} определяются значения разностей координат точки S: dS{x,y,h} = lineint({b,c,s}{x,y,h}, d{B,C}{x,y,h}) Переходим теперь к линии a-s и тем же самым линейным интерполированием/экстраполированием определяем значения разностей точки M: dM{x,y,h} = lineint({a,s,m}{x,y,h}, d{A,S}{x,y,h}) Ну и сами "закрашенные" координаты точки m: M{x,y,h} = m{x,y,h} + dM{x,y,h} Данный метод не оптимизирован от слова совсем. В компьютерной графике применяются методы с многочисленными оптимизациями, но они мешают увидеть суть "окрашивания" (интерполяции/экстраполяции) треугольника. -------------------------------------------------------- Описание линейной интерполяции lineint(). Распишу на примере координаты x: dS.x = lineint({b,c,s}x, d{B,C}x) = dB.x + (dC.x - dB.x) * s.l / c.l s.l = sqrt((s.x - b.x)^2 + (s.y - b.y)^2 + (s.h - b.h)^2) c.l = sqrt((c.x - b.x)^2 + (c.y - b.y)^2 + (c.h - b.h)^2) -------------------------------------------------------- Пересечение S линий A-M и B-C: d = (b.x*(m.y-a.y)+c.x*(a.y-m.y)+(c.y-b.y)*m.x+a.x*(b.y-c.y)) kL = -(a.x*(c.y-b.y)+b.x*(a.y-c.y)+(b.y-a.y)*c.x)/d s.x = a.x + (m.x-a.x)*kL s.y = a.y + (m.y-a.y)*kL s.h = a.h + (m.h-a.h)*kL Всё.
Возникает вопрос. А не проще ли для "закрашивания" точки m сделать следующее... "Цвет" точки m равен совокупности трёх "цветов" в вершинах треугольника (эти три "цвета" условно обзову "исходными цветами"). Вес каждого "исходного цвета" назначить обратно пропорциональным расстоянию от точки m до соответствующей вершины треугольника. "Цвет" точки m принять равным среднему весовому.
Это уже радиальная интерполяция. Она образует три ярко выраженные окружности вокруг вершин с особой точкой в самой вершине. Такая интерполяция нелинейна. Но при желании можно конечно. Ты не обратил внимание на главное! "Уравнивание" в данном случае предполагает (и это хорошо видно на картинке) нахождение съёмочных точек внутри треугольников исходных точек. В этом подвох! Зачастую это условие тупо не выполняется!
Нет, я понял, что речь опять же о неком поле поправок по типу NTv2. Вопрос в том, какую интерполяцию лучше выбрать. Я считаю, что лучше сделать так, поскольку в линейной модели влияние одной из вершин может быть сведено практически к нулю в том случае, когда точка m расположена вблизи стороны треугольника. В то же время целесообразно обеспечить сходимость точки m не только по отношению к двум наиболее близким к ней точкам (например, А и B, которые образуют сторону треугольника), но и ко всем ближайшим исходным пунктам в принципе. В том числе и к тем, которые находятся за пределами треугольника, но также включены в сеть.
Тут ещё такой момент...Всё таки, NTv2 - это грид, прямоугольная сетка, не треугольники там. И там преобазование идет между датумами, проекций там нет. Про TIN в пересчетах статью прикладываю.
Я даже более того скажу, NTv2 - это скорее растр, чем какая то сетка. Но в данной теме разговор ведётся за что то более нашенское, отечественное: https://geodesist.ru/threads/kalibrovka-ili-uravnivanie.89266/#post-1033804
Да, он так и строится, в начале растры разностей B и L, потом уже в специфический формат и всё. Так уже изобрели таблицу поправок от СК-32 к СК-42 по листам 1:1 000 000. Задолго до той инструкции...
Ну мало ли, что изобрели. Метод то остался. Раньше вообще всё "любили" по таблицам делать. "Был у меня тоже один изобретатель..."
Для сравнения сделал таблицу с радиальной интерполяцией. Нелинейность значительная. Но конкретнее можно говорить "за/против" только после продолжительного тестирования.
Ну что. Симпатично. И даже цветисто. Но поразмыслив чуток, прихожу к мнению, что ваше предложение все же не является средством решения задачи выбора набора исходных пунктов, не отягощающих построение ошибками исходных данных. Скорее -это решение задачи сглаживания морщин дисторсий геодезического построения, имеющего ошибки исходных данных. Причем эти ошибки уже должны быть втиснуты в определенные рамки. Иначе сглаживать придется весьма серьезные деформации, лишающие решение вского смысла. Установление рамок применимости вашего решения, видимо, ждет завершения вашего исследования. Вот кстати, для анализа и визуализации деформаций ваше решение будет весьма уместно. Успехов!
Это не исследование, а аналитический аналог графическому методу из https://geodesist.ru/threads/kalibrovka-ili-uravnivanie.89266/#post-1033804 . В нём не указано, что есть какие то ограничение на разность координат, указано только, что "это" должно быть сделано.
Добавил тест на вхождение точки в треугольник с контролем ошибок округления. PS: Применена Гауссова нормализация переменных в МНК
Коли речь зашла за "исследования"... Линейная и радиальная интерполяция являются простыми распределениями величин без учёта самих величин. А ежели поставить "задачу" шире? Ежели потребовать, чтобы распределение величин зависело от самих величин? Вот вам и "исследование". В качестве альтернативы линейной и радиальной интерполяции добавил нелинейную "интерполяцию" (распределение) с помощью трёх "единичных сфер".