Алгоритм распознания прямого участка замкнутой кривой

Алгоритмы: от сортировки пузырьком до численных методов

Модераторы: C_O_D_E, DeeJayC

Excalibur921
Сообщения: 36
Зарегистрирован: 12 окт 2013, 12:42

23 окт 2013, 11:44

somewhere писал(а):Arccos(dx/R)
нет в потке я оговорился не Арккосинус а акосинус..
брать предлагал тангенс..
ну да ладна
Вот построил в программе функции как вы описывали через COS и дифференцирование углов:
График углов оч большой..360 значений поэтому он просто в центре окна..все в разработке..
Квадратики это кнопки =) потом доделаю в глут оказалось нет кнопок 0_0
вот скрин программы:
ScreenShot00136.gif
Изображение
Но возникли вопросы..

Вы в своей программе проверяли четверть тригонометр круга косинуса? т.е у вас уголы идут от 0- 360 ? или только 0- 180 потом опять 0-180 ?
если брать 0-360 углы то на графике всплеск так и должно быть?( проход угла отрезка через ноль)

График дифференцирования почти одинаковый на дугах и прямых :
см скриншот ScreenShot00137.gif ScreenShot00138.gif этот участок
может я нетак дифференцирую?
Угол1отрезка-Угол2отрезка Угол2отрезка-Угол3отрезка Угол3отрезка-Угол4отрезка правильно?
Всеравно на выгнутых траекториях диф график почти прямая..
ScreenShot00139.gif
ScreenShot00140.gif

Может еще раз продифференцировать этот диф график или чтот нетак?
Или все дело в алгоритме поиска? Хотелось бы чтобы диф график был на ровных участках прямой возле нуля..
Excalibur921
Сообщения: 36
Зарегистрирован: 12 окт 2013, 12:42

23 окт 2013, 11:58

somewhere писал(а):Arccos(dx/R)
нет в потке я оговорился не Арккосинус а акосинус..
брать предлагал тангенс..
ну да ладна
Вот построил в программе функции как вы описывали через COS и дифференцирование углов:
График углов оч большой..360 значений поэтому он просто в центре окна..все в разработке..
Квадратики это кнопки =) потом доделаю в глут оказалось нет кнопок 0_0
вот скрин программы:
ScreenShot00136.gif
Изображение
Но возникли вопросы..

Вы в своей программе проверяли четверть тригонометр круга косинуса? т.е у вас уголы идут от 0- 360 ? или только 0- 180 потом опять 0-180 ?
если брать 0-360 углы то на графике всплеск так и должно быть?( проход угла отрезка через ноль)

График дифференцирования почти одинаковый на дугах и прямых :
см скриншот ScreenShot00137.gif ScreenShot00138.gif этот участок
может я нетак дифференцирую?
Угол1отрезка-Угол2отрезка Угол2отрезка-Угол3отрезка Угол3отрезка-Угол4отрезка правильно?
Всеравно на выгнутых траекториях диф график почти прямая..
ScreenShot00139.gif
ScreenShot00140.gif

Может еще раз продифференцировать этот диф график или чтот нетак?
Или все дело в алгоритме поиска? Хотелось бы чтобы диф график был на ровных участках прямой возле нуля..
======
Excalibur921
Сообщения: 36
Зарегистрирован: 12 окт 2013, 12:42

23 окт 2013, 12:20

Вот графики через COS и дифференцирование углов:
График углов большой поэтому он просто в центре окна
ScreenShot00136
[ATTACH]1781[/ATTACH]
Но возникли вопросы..
У вас уголы идут от 0- 360 ? или только 0- 180 потом опять 0-180 ?
Но график дифференцирования почти одинаковый на дугах и прямых :
см скриншот
ScreenShot00137
[ATTACH]1782[/ATTACH]
ScreenShot00138 этот участок
[ATTACH]1783[/ATTACH]
может я нетак дифференцирую?
Угол1отрезка-Угол2отрезка
Угол2отрезка-Угол3отрезка
Угол3отрезка-Угол4отрезка
правильно?
Всеравно на выгнутых траекториях диф график почти прямая..
ScreenShot00139
[ATTACH]1784[/ATTACH]

ScreenShot00140
[ATTACH]1785[/ATTACH]
Может еще раз продифференцировать этот диф график или чтот нетак?
Или все дело в алгоритме поиска? Хотелось бы чтобы диф график был на ровных участках прямой возле нуля..
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

23 окт 2013, 12:50

Может еще раз продифференцировать этот диф график или чтот нетак?
Или все дело в алгоритме поиска? Хотелось бы чтобы диф график был на ровных участках прямой возле нуля..
Еще раз внимательно прочитать посты 13 и 15. Я там говорил как именно нужно вычислять прямые участки. Простого дифференцирования и проверки на вхождение в диапазон - недостаточно
It's a long way to the top if you wanna rock'n'roll
Excalibur921
Сообщения: 36
Зарегистрирован: 12 окт 2013, 12:42

23 окт 2013, 14:05

somewhere писал(а): Сумма разниц углов не превышает Z
Отдельно взятый элемент в участке не превышает Z

работаю с траекторией
т.е может так корректней:

Сумма разниц диф значений графика углов не превышает Z
максимально большой элемент в этом исследуемом участке не превышает Z ?
а потом ищем самый длинный участок.

P.S это называется интегриррование? но вы так не говорите чтобы не напугать новичка?))
алгоритм сламает мне мозг))
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

23 окт 2013, 14:49

Сумма разниц углов и сумма диф. значений - это одно и тоже.
максимально большой элемент в этом исследуемом участке не превышает Z ?
зачем такое усложнение? на практике модуль любого элемента исследуемого участка не должен быть больше Z
это называется интегриррование?
Сумма значений некоторого массива с математической точки зрения - интегрирование. А говорю я так потому, чтобы потом увидев трехэтажную формулу с интегралами и пределами, смогли ее понять как программист, а не как математик.
It's a long way to the top if you wanna rock'n'roll
Excalibur921
Сообщения: 36
Зарегистрирован: 12 окт 2013, 12:42

23 окт 2013, 20:11

уже накатал полметровый псевдокод но...
Немогу понять идею как искать точки ниже Z эффективно
сечас сверяю пары
сверять каждую с Z?
сверять пары точек с Z?
а почему не тройки точек?
или может вообще сверять пачками? ( по 8 к примеру? ну они ниже Z но вдруг их сумма выше Z)
или вообще убрать проверку c Z (ведь суммы проверяется на ниже Z )?

Ведь условие поиска прямой на траектории : минимальное кол-во точек прямого участка
кол-во точек/4 или кол-во точек/3

или вообще сначала найти все точки ниже Z потом в них нужные диапазоны минимальной длинны...
Excalibur921
Сообщения: 36
Зарегистрирован: 12 окт 2013, 12:42

29 окт 2013, 21:25

3 дня мучался с кодом..
но ваша идея работает!
Спасибо я бы сам такое не придумал=)

Теперь у меня новая задача: найти отклонение точек(длинну перпендекуляра?) от прямой( отрезка)

Видится два варианта решения:
(быстрый)
1) сложить диф значения углов отрезков на анализируемом участке с учетом знаков и разделить на кол-во точек
1.1)сложить диф значения углов отрезков по модулю..

Получим абстрактную велечину отклоненния но всеравно помогает в сортировке статистики и много быстрей второго метода.

(правильный наверно)
2)Есть формула для нахождения длинны проекции отрезка на прямую ( отрезок) но считать дольше и сложней.

Или есть необычный вариант?
Подскажете чтото?
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

30 окт 2013, 11:41

Отклонение можно выражать по разному. Можно в разнице углов (метод 1), а можно в длине перпендикуляра (метод 2) - верны оба метода. Только вот если считать отклонение в углах, то будем получать разные приращения перпендикуляра для одинаковых приращений углов. Какой метод выбрать - это вам решать
Получим абстрактную велечину отклоненния но всеравно помогает в сортировке статистики и много быстрей второго метода.
Если мы имеем информацию об углах, то длина перпендикуляра - это синус разницы углов на длину вектора (т.е. по сути расстояние между двумя точками) - никаких сложный вычислений я не вижу
It's a long way to the top if you wanna rock'n'roll
Excalibur921
Сообщения: 36
Зарегистрирован: 12 окт 2013, 12:42

30 окт 2013, 19:41

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

это формула расстояния от точки до отрезка
думал может есть какаято компактней

P.S не подскажете как бы мне с сопроцессором связатся?
вся литература только по Intel сопроцессорам
мне нужны Cos , Sin , квадратная степень, корень квадратный
процессор AMD Athlon XP 2000+ да старый=)
может там просто пару строчек на ассемблере и они общие для всех?
никогда с сопроцессором не работал
или может есть какойто урок книга по AMD сопроцесорам? все книги по Ассемблеру встречал только у автора помоему Калашников и тамже сопроцессоры Intel =( все про интел...
Ответить