Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 17.01.2010, 22:58   #1
Horror
Бывалый
 
Регистрация: 09.09.2006
Сообщений: 656
Написано 54 полезных сообщений
(для 110 пользователей)
Сравнение кривых

Всем привет!
сразу к делу)
вообщем есть кривая номер один (массив точек (х,у))
и есть другая кривая тоже массив точек
длины массивов разные!
вообщем нужно сравнить 2 кривые и узнать схожи ли они)
и на сколько схожи
совсем нет идей поэтому и спрашиваю тут...
(Offline)
 
Ответить с цитированием
Старый 17.01.2010, 23:03   #2
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: Сравнение кривых


Так это ты ломаешь каптчу на булке?
Шучу

Предлагаю простой способ:
Переносишь 1ую точку второй кривой на 1ую точку первой.
Пробегаешься циклом по остальным точкам и cравниваешь дистанцию от данной точки первой кривой до данной точки второй кривой. И если она больше допустимой погрешности то они не равны.

Тоесть допустим:
2 кривые
2 массива.
В одной кривой 5 звеньев.

Перемещение второй к первой:

x_d=Curve1[i].x-Curve2[i].x// смещение

for(i=0;i<5;i++)
{
 
Curve2[i].x-=x_d// перемещаем

Сравнение:
for(i=0;i<5;i++)
{
 if (
Distance(Curve1[i].x,Curve1[i].y,Curve2[i].x,Curve2[i].y)>max_dist)
 {
    
// Они не равны
   
Exit;
 }

Дистанцию находить так:
Sqr(((x1 x2) * (x1 x2)) + ((y1 y2) * (y1 y2))) 
Если нужен код в B3D, то могу и в нём написать.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
Harter (18.01.2010), Horror (18.01.2010)
Старый 17.01.2010, 23:22   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Сравнение кривых

а если прямые имеют разный масштаб? Подобие подразумевает, что символ набранный разным кеглем должен счиаться одинаковым
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Horror (18.01.2010)
Старый 18.01.2010, 01:01   #4
Horror
Бывалый
 
Регистрация: 09.09.2006
Сообщений: 656
Написано 54 полезных сообщений
(для 110 пользователей)
Ответ: Сравнение кривых

>Предлагаю простой способ:
>Переносишь 1ую точку второй кривой на 1ую точку первой.
>Пробегаешься циклом по остальным точкам и cравниваешь дистанцию
>от данной точки первой кривой до данной точки второй кривой. И если
>она больше допустимой погрешности то они не равны.

Поэтому я и написал что массивы имеют разную длину)
я думал какнить повставлять в массив с меньшим числом новые точки,
но это както по хитрому... надо
(оО кое-что уже придумал)

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

масштаб один! и положение одной кривой над другой - близко наложенно)
(Offline)
 
Ответить с цитированием
Старый 18.01.2010, 01:57   #5
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Сравнение кривых

масштаб выровнять несложно! (габаритные прямоугольники подогнать да и все дела)
а сравнивать думаю так
построить жирные линии между точками
чем жирнее тем больше погрешность
то есть построить обе фигуры жирными линиями
и наложить
если совпало N % то значит можно считать эквивалентными

а вот если поворот имеет место быть, то тогда хз
сходу на ум ничего не приходит
кстати как ты сей массивець точек получил ? Из растровой картинки али как?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Horror (18.01.2010)
Старый 18.01.2010, 20:24   #6
Horror
Бывалый
 
Регистрация: 09.09.2006
Сообщений: 656
Написано 54 полезных сообщений
(для 110 пользователей)
Ответ: Сравнение кривых

нет не из расты, из расты медленно получается
поэтому и ищю метод побыстрей.
первая кривая сделанна (к примеру) в редакторе
2я пользователем мышкой.
ПС я уже придумал один метод, но он фигово работает, если кривые оч сложные
(Offline)
 
Ответить с цитированием
Старый 20.01.2010, 22:05   #7
ZanoZa
Элита
 
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений
(для 252 пользователей)
Ответ: Сравнение кривых

Преобразовать кривые в набор прямых, измеряя при этом степень апроксимации этих кривых. По идее на этом этапе их можно привести к такому виду что количество точек будет одинаково, назовем этот вид нормализованным.
Затем сравниваем две получившиеся норм. кривые с учетом допустимых отклонений (например угол наклона одного отрезка первой кривой, больше на пол градуса, чем соответствющий отрезок второй).
Основная идея - привести две кривые путем аппроксимации к одному виду. В выполнимости этого я несколько сомневаюсь
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (21.01.2010)
Старый 20.01.2010, 22:15   #8
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Сравнение кривых

я вот погуглил немного и узнал что с подобными задачами на УРА справляются нейросети !! к тому же достаточно простой структуры !!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 09:59.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com