Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/40: Рейтинг темы: голосов - 40, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 12.11.2016
Сообщений: 7

Сравнение двух кривых

25.11.2016, 01:04. Показов 8375. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Не так давно у меня возникла задача по сравнению изолиний. Не двух конкретных, конечно, а множества. Я в процессе создания алгоритма, многое уже сделано, но осталась основная задача - наилучшим образом сравнить две конкретных кривых. Теперь подробнее)

Есть куча изолинии в одном конкретном участке океана. Есть еще одна куча в другом. Требуется сказать какая кривая (а точнее кусок кривой определенной длины) из одного участка лучше всего совпадает с кривой из другого участка. При этом надо понимать, что все кривые разной длины, расположены с разным наклоном (т.е. может потребоваться поворот кривой отн-но второй кривой).

Что я делаю. Беру конкретную кривую с первого участка, помещаю ее в новую систему координат с началом в середине кривой (примерно). Перевожу координаты каждой точки кривой в новые координаты. То же самое с кривой со второго участка.

В итоге имеем два набора координат x,y. Соответственно каждый из этих наборов составляет кривую. Пусть наши кривые одинаковой длины (расстояния для обеих кривых от первой точки до последней равны). Кривые уже в одной системе координат, начала и концы кривых совмещены.

Далее требуется для конкретно этой пары кривых выяснить насколько они совпадают. Что значит совпадают? Значит, если наложить одну прямую на другую (что в целом уже сделано ибо они в одной системе координат и с одинаковой начальной-конечной точкой), отклонения одной от другой будут минимальные.
Каким же образом сравнивать эти отклонения? Я не придумал ничего лучшего и простого как посчитать площадь между ними. Есть подозрение, что это не самый точный способ) И также для многих кривых положение полученное мною (концы совмещены) не самое оптимальное, т.е. мне нужно перемещать одну кривую отн-но второй по одной из осей?

Вот такие дела. Хотел задать вопрос, в итоге написал все и даже вопроса-то четкого сформулировать не могу. Скорее комментарии по поводу верности алгоритма (перенос кривых в новые системы координат, оптимальность метода площадей, перемещение кривых отн-но друг друга). Буду рад любой подсказке идее. Ну и конечно, если кто-то скажет, что почитать по поводу сравнения двух кривых (двух кривых на плоскости, расположенных совсем не рядом, возможно разной длины) буду безмерно благодарен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.11.2016, 01:04
Ответы с готовыми решениями:

Создание диаграммы из двух кривых
Здравствуйте, столкнулся с проблемой. Мне нужно создать диаграмму, чтобы в ней было две разные кривые. Одна кривая: "один р2"...

Найти точки пересечения двух кривых
Здравствуйте. У меня такая проблема. При помощи процедуры fzero решить следующие задачи: 1. Найти точки пересечения двух кривых exp(x)-2...

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

8
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
25.11.2016, 07:24
тут наверное нужно больше про определение говорить

если кривые разной длины, то корректно ли их сравнивать?
т.е. две подобные кривые, например, дуги окружности радиуса 100 и 200 с одинаковым углом будут равны?

а сам способ как раз идеальный. минимальная площадь между кривыми. в пределе - ноль...
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
25.11.2016, 09:50
Тут многое зависит от того как бы вы сравнивали их самостоятельно, без компьютера, а так методов сравнения можно много понапридумывать.
- в новой системе координат соединить начало и конец обоих кривых
- считать сумму расстояний между соответствующими точками кривых при проходе по ним
- положить (сжать) обе кривые концами на точки (0;0), (1;1)
- делить результат вычисления на длину более длинной кривой, или на произведение длин кривых (в зависимости от типа сравнения).
- сравнивать "поведение" кривых - вектор обхода кривых, или величину его изменения (т.е. сравнение по производной).
- также проверить вариант когда у одной кривой начало и конец поменяли местами, из двух проверок выбрать ту которая показывает большую схожесть

Сравнение по площади может работать неправильно если изолинию нельзя будет определить как однозначную функцию y=f(x), грубо говоря если нужно сравнить два овала с разными пропорциями, то мы получим довольно существенную разность в площадях при несущественной разности в форме.
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
25.11.2016, 10:25
qillous
Попробуйте применить метод наименьших квадратов.
Берете N точек на оси абсцисс и вычисляете ординаты
ваших кривых. Находите разность соответствующих
ординат, возводите в квадрат ... и все суммируете.
Далее сдвигаете одну кривую "параллельно" самой себе
и вновь производите расчеты.
В общем Наименьшая сумма квадратов и будет лучшим
результатом. (число точек на ваше усмотрение)
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
25.11.2016, 21:10
Упомянули океан, скорей всего изоуровень это карта высот дна?
Наверно сверять сами изоуровни не имеет смысла т.к. обычно это гладкие кривые которые суть стояться по не существующих данных(аппроксимация или интерполяция).
Сверять куски кривых тоже не имеет смысла т.к. это просто случайный шум.
Мне кажется сверять нужно класс поверхности. Т.е. брать точки в 3д сразу куска поверхности. И распознать что это? Это холмы, это уступы, это овраги и т.п.
Я бы гуглил “похожесть поверхностей” еще лучше “Классификация дна океана”.
http://www.activestudy.info/ob... go-relefa/
В дополн инфе:
“Принципы генетической классификации подводного рельефа
Методы изучения подводного рельефа
Генетические типы подводного рельефа” и т.д.

А сам классификатор это наверно нейросеть которая обучалась на классифицированной вручную выборке данных.
Аналог задачи распознать рукописные цифры.
0
0 / 0 / 0
Регистрация: 12.11.2016
Сообщений: 7
25.11.2016, 23:57  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
тут наверное нужно больше про определение говорить
Цитата Сообщение от wingblack Посмотреть сообщение
Тут многое зависит от того как бы вы сравнивали их самостоятельно, без компьютера, а так методов сравнения можно много понапридумывать
Думал, что достаточно объяснил(
Если взять две кривых, вырезать из листа бумаги одну и попробовать наложить на другую (как угодна перемещая, только без поворота на 180 градусов), то чем более они совпадут, тем лучше. Т.е. ни о каком подобие речи не идет, полное совпадение.

Цитата Сообщение от echs Посмотреть сообщение
Попробуйте применить метод наименьших квадратов
Мне он кажется более сложным в реализации чем подсчет площади. Но в будущем сделаю и им - сравню рез-ты, хотя должны быть одинаковы.

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Упомянули океан, скорей всего изоуровень это карта высот дна?
Именно. Но в остальном немного не то) У меня задача именно сравнить изолинии, на этом строится вся работа, уже поздно менять подход. В плане того, что я пишу алгоритм только для того, чтобы убедиться, что выбраны нужные участки кривых. А выбраны они были уже давно руками.
У меня точки идут через каждые полмили, так что весьма точные данные. Для того, что я хочу.

А теперь пример что именно мне нужно сделать, надеюсь станет совсем понятно.
Довольно давно Фрэнсисом Бэконом было замечено совпадение берегов Африки и Южной Америки. Из этого выросла теория дрейфов материков. Именно о таком совпадение линий (только не берега, а подводных хребтов и иных образований) идет речь. То есть мне нужно найти уровни одной глубины (сами глубины могут быть разные), совпадающие наилучшем образом, как береговые линии некоторых материков.

P.s. По поводу разной длины кривых. В целом длину можно ограничить небольшим интервалом (вдруг кривая чуть короче будет совпадать намного лучше). Естественно разным для разных участков океана.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
26.11.2016, 14:33
Цитата Сообщение от qillous Посмотреть сообщение
совпадение берегов Африки и Южной Америки.
Нужно было начать тему с этого.

1)зачем сверять то что сильно изменяет форму? (дно или берег)
Все давно посчитано…
https://books.google.com.ua/bo... B8&f=false
2) За 100 млн. лет эрозия и т.д. могли фундаментально поменять мелкие детали рельефа и дна.
Значит сверять их точно вообще бессмысленно.
3)Материки могли кроме сдвига еще и произвольно повернуться на некие 3 угла.
Значит сверять изолинии мне кажется тоже бессмысленно и вообще не корректно.

Наверно лучше поискать как исследователи сверяли их…
Как велосипед бы сделал примерно так:
Cтроил 2 поверхности в 3д по данным изолиний (рельеф Америки и Африки дальше обозначим A и B).
Одна поверхность неподвижна (например A), другой найти 6 неизвестных численно(XYZ координаты начала системы координат поверхности B, три угла поворота вокруг каждой оси).

Задача: найти такие 6 неизвестных чтобы расстояние между поверхностями было минимальным.

Величина например среднего отклонения поверхностей (в км.) и будет ответ.

Суть расчета: грубый расчет затем уточнение. Основа расчета: расстояние от вершины в 3д до треугольника.
К примеру: есть данные изолинии высот от 0 до 5 км шаг 0.5 км.
A неподвижна для B найти 6 неизвестных.

1) строим поверхности A и B с шагом 2.5 км ищем 6 неизвестных поверхности B.
2)Нашли грубо 6 неизвестных, снова строим поверхности с более мелким шагом и т.д.

Или лучше поискать типа: Поиск совпадения поверхности. Скорей всего давно есть адекватные алгоритмы анализа совпадения двух поверхностей…
Изначально приблизить поверхности лучше визуально в 3д редакторе вручную. Может даже это быстрей всего и проще вообще как ответ.
0
0 / 0 / 0
Регистрация: 12.11.2016
Сообщений: 7
26.11.2016, 14:50  [ТС]
Спасибо, Вы правы по поводу 3д модели, стало ясно как пришить сюда вычматы. Но это немного перебор для моей работы. Сравнение идет не только по изолиниям, но и по многим другим фактором (как то магнитные аномалии, состав грунта и т.д.). Совпадение изолинии только один из аргументов.
По поводу сдвигов. Сдвиг еще может быть и по вертикали (сползание) и это описывается схемой Вернике. Именно поэтому 3д модель необязательна, совпадение линий с глубиной 2000 и 3000 тоже хорошо.
Поворот по осям - да, конечно. Правда в моей случае только 2 оси. Я предполагаю, что решил эту проблему перемещением обеих изолиний в относительные системы координат. Видимо не прав( С поворотом возникли небольшие проблемы, может посоветует как лучше реализовать? Перейти в полярную систему координат правильно понимаю?

По поводу давно все сделано - это не так. Моя работа актуальна, для очень многих областей таких сравнений не проводилось. Хотя алгоритм для такого написан почти со 100% вероятностью. Но во-первых, не очень представляю как его найти, во-вторых, предпочитаю сделать сам, пусть и велосипед, всегда есть вероятность, что мой алгоритм будет лучше.

Да, вручную конечно проще для конкретного участка, но повторюсь, это уже сделано. Теперь хочется сравнить какие рез-ты даст алгоритм. И это работа на будущее. Если учесть, что мне нужно провести такое сравнение для 10 участков например, то проще один раз написать алгоритм, чем каждый раз сравнивать руками, ведь так?)
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
26.11.2016, 15:50
Цитата Сообщение от qillous Посмотреть сообщение
Но это немного перебор для моей работы.
Почему? Ведь аналог задачи:
Некий цельный стержень из стекла. Разломили пополам, части откололись, остались две половинки.

Найти такие 6 неизвестных (координаты XYZ и 3 угла) одной половинки стержня чтобы их максимально приблизить. Удобно смотреть поверхности а не изолинии.
Цитата Сообщение от qillous Посмотреть сообщение
Сравнение идет не только по изолиниям, но и по многим другим фактором (как то магнитные аномалии, состав грунта и т.д.).
Разве магнитные аномалии не следствие состава грунта и карты магнитного поля на момент измерения?
Значит лучше сверять только состав грунта, а магнитное поле будет только мешать.

И вообще: тип грунта это например цвет поверхности точки, величина магнитного поля- прозрачность точки.
Еще больше наглядность 3д модели. Аномалии состава грунта отличные метки для сопоставления. Можно выводить не всю карту а некие экстремумы точки.
Цитата Сообщение от qillous Посмотреть сообщение
перемещением обеих изолиний в относительные системы координат. Видимо не прав
Относительная система координат и будет у поверхности с наглядным профилем в 3д.
Цитата Сообщение от qillous Посмотреть сообщение
Перейти в полярную систему
Зачем? У вас 6 неизвестных, система координат тут не имеет значения обычно берут декартову.
Цитата Сообщение от qillous Посмотреть сообщение
Правда в моей случае только 2 оси.
Какие 2 оси? У вас координаты глубин. Т.е. 3 координаты, XY точки и Z глубина. Так и строить поверхность в 3д.
Цитата Сообщение от qillous Посмотреть сообщение
не очень представляю как его найти,
Пробовать разные запросы. Смотреть ссылки на что ссылается автор. Обычно книги поверхностно освещают и в них есть ссылки на исследования в которых детально описан метод. Глянуть книги по этой теме… Найти из какой области они.
Попробовать поискать спец форумы узкой направленности по геологии или что это…
Цитата Сообщение от qillous Посмотреть сообщение
предпочитаю сделать сам, пусть и велосипед, всегда есть вероятность, что мой алгоритм будет лучше.
Или много хуже и не иметь научного подхода или вообще смысла(уже есть но известно для узких спецов).
Цитата Сообщение от qillous Посмотреть сообщение
проще для конкретного участка,
Какого участка? Строите всю поверхность и смотрите в 3д. Если потянет комп или кусками.
Цитата Сообщение от qillous Посмотреть сообщение
чем каждый раз сравнивать руками, ведь так?)
Не знаю. Лучше поискать как решали вопрос научно. Наверняка есть много авторов с разными подходами, а если вопрос важный то вообще может строгие стандартизированные методы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.11.2016, 15:50
Помогаю со студенческими работами здесь

Вычислить площадь фигуры между дугами двух кривых
Ребят в программирование шарю))) Но чё то алгоритм до меня не доходит... Написать программу в консоли. Может кто сыллку даст на...

Написать программу для построения двух кривых по заданным точкам
Доброго времени суток! У меня такая задачка Написать программу, для построения двух кривых по заданным точкам. Точки задаются в...

Построить семейство из двух кривых, заданных уравнением в полярных координатах
Здравствуйте форумчане, помогите пожалуйста разобраться в решении задачи: Построить семейство из двух кривых, заданных уравнением в...

Написать функцию нахождения точек пересечения двух кривых, основанную на методе простой итерации
Помогите реализовать задачу. Заданы функции Y1, Y2, Y3 и интервал , который содержит координаты точек пересечения кривых Y1 = arctg(x), Y2...

Сравнение двух текстовых переменных и вывод их разницы в виде текста что отличается в двух массивах
Есть две текстовых переменных типа string. Необходимо вывести в третью переменную, разницу этих двух переменных т.е. первая переменная =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru