roboforum.ru

Технический форум по робототехнике.
Текущее время: 15 май 2025, 17:04

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Найти вторую координату точки принадлежащей отрезку
СообщениеДобавлено: 23 авг 2007, 19:05 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
вобщем нуна ф-ция
которая выполнит сабжевую проблему.

есть некий график нелинейный, я его разбиваю на отрезки - с этим все ок
(сглаживание ненать)
а вот как потом узнать скажем Y точки лежащей на каком-то отрезке, если известен X...
(как найти нужный отрезок и сам потом "придумаю" а вот точку на отрезке чтот никак - видать переотдыхал   :? )

что-то пока думаю об итерациях... :oops:

Добавлено:

массив точек навроде такого:
Код:
const float dat_alfa0[][2] = {
   /* x       , y           */
   { 0        , 0           },
   { 10.245517, 0.035386632 },
   { 20.147485, 0.072188729 },
   { 30.049453, 0.10969856  },
   { 40.157712, 0.14579292  },
   { 50.05968 , 0.18047182  },
   { 60.167939, 0.21656619  },
   { 70.069907, 0.25195282  }
};


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 авг 2007, 23:50 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
все... побил стены лбом, очухался... вспомнил чуток геометрию  :lol:
написал так:
Код:
/**
* вычисляет вторую координату точки на графике.
* точка ДОЛЖНА быть на графике!
*/

/**
* Вычисляет абсциссу
*/
float graph_get_x (const float graph, float y)
{
 unsigned int i;
 for (i = 0; i <= (sizeof(graph)/(2*sizeof(graph[0][0]))); i++)
 {
   if (graph[i][1] <= y && y <= graph[i+1][1]) break;
 }
 return graph_get_coord_x(graph[i][0], graph[i][1], graph[i+1][0], graph[i+1][1], y);
}

/**
* Вычисляет ординату
*/
float graph_get_y (const float graph, float x)
{
   unsigned int i;
   for (i = 0; i <= (sizeof(graph)/(2*sizeof(graph[0][0]))); i++)
   {
     if (graph[i][0] <= x && x <= graph[i+1][0]) break;
   }
   return graph_get_coord_y(graph[i][0], graph[i][1], graph[i+1][0], graph[i+1][1], x);
}

/**
* A (x1; y1) - start
* B (x2; y2) - stop
* x (y)      - one of C
*/
#define graph_get_coord_x (      x1,       y1,       x2,       y2,       y) \
       graph_get_coord_y (      y1,       x1,       y2,       x2,       y)
float   graph_get_coord_y (float x1, float y1, float x2, float y2, float x)
{
 return (((y2 - y1)*(x - x1))/(x2 - x1)+ y1);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 авг 2007, 11:39 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
а я вобще ничерта не понял
ни то чё ты хотел не то чё ты сделал...
какой же это тогда вопрос для начинающих ?

а самое интересное зачем оно тебе надо было ?:)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 авг 2007, 13:00 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
Я тож не сильно понял, чего надо было... Но если есть начало отрезка и конец (координаты), то найти одну из координат точки на отрезке - это класс 6-7 геометрии  :lol:  Так что точно для начинающих  :P


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 авг 2007, 13:19 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
зачем - есть датчик, и его выходное напряжение идет не линейно с измеряемым параметром.
в ДШ например есть график показывающий изменение напряжения на выходе от изменения входного параметра.
так вот - я этот график оцифровываю - получается много отрезков.
так вот зная входное напряжение (АЦП) мне нужно было преобразовать в ту величину
=> по извесной одной координате найти вторую...

всеравно наверн непонятно написал...

а в новички - т.к на мой взгляд этот форум как нельзя лучше подходит


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 авг 2007, 13:20 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
Digit писал(а):
Я тож не сильно понял, чего надо было... Но если есть начало отрезка и конец (координаты), то найти одну из координат точки на отрезке - это класс 6-7 геометрии  :lol:  Так что точно для начинающих  :P

ага, я просто наверн переотдыхал... ниче не помню, просто тупо открыл мучебник и нашел :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 авг 2007, 17:35 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
Vooon писал(а):
всеравно наверн непонятно написал...


вот как раз теперь понятно :)
сам когдато над этим вопросом думал, для применения датчикой с нелинейными хар-ками


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 авг 2007, 20:50 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
Myp писал(а):
вот как раз теперь понятно :)
сам когдато над этим вопросом думал, для применения датчикой с нелинейными хар-ками

и че надумал?  :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 авг 2007, 14:47 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2007, 19:23
Сообщения: 1058
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК
А насколько большая разность между точками и как сильно меняются значения функции, в зависимости от разных параметров? Может выгоднее аппроксимацию замутить, вычислить один раз на большом ПК коэффициенты, например, полинома по уже имеющимся значениям и потом уже с его (полинома или более другой подходящей функции) помощью в контроллере считать?  8)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 авг 2007, 18:59 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
Vooon писал(а):
Myp писал(а):
вот как раз теперь понятно :)
сам когдато над этим вопросом думал, для применения датчикой с нелинейными хар-ками

и че надумал?  :)

а ничё
плюнул на это дело = )))
типа такого, сначала на бумажке посчитать, а потом в мк загнать
если Х от нуля до десяти то У = (2Х)
если Х от 10 до 20 то У = (2Х) - 3
если Х от 20 до 30 то У =  (2Х) - 7


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 авг 2007, 14:34 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
...это называется "табличное представление функции" :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 авг 2007, 21:41 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2007, 19:23
Сообщения: 1058
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК
Ну так если значения в таблице постоянны, конечно лучше какой-нибудь аппроксимирующий полином или другую функцию на ПК рассчитать. Тогда программа для контроллера поэлегантней получится.  :) Кроме того, это позволит находить значения функции и в промежуточных точках, для которых измерения не проводились.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 авг 2007, 21:51 
Не в сети
Аватара пользователя

Зарегистрирован: 08 окт 2004, 16:43
Сообщения: 2114
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий
Цитата:
Тогда программа для контроллера поэлегантней получится

Но она будет медленней =)

_________________
Все новости о моих проектах http://savethebest.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 авг 2007, 12:56 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2007, 19:23
Сообщения: 1058
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК
Виталий писал(а):
Но она будет медленней =)

:shock: Почему?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 авг 2007, 12:57 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
SSG писал(а):
Кроме того, это позволит находить значения функции и в промежуточных точках, для которых измерения не проводились.

...а кроме того, что прога будет тормознутее, за пределами рассчитанного полинома могут быть редкостные косяки ;-) Скажем так, за пределами табличных значений можно найти результат с приемлемой точностью только для относительно простых функций. А между точками таблицы можно и линейную апроксимацию иметь - точность будет зависеть от количества точек в таблице...
А вообще, это традиционный спор из разряда "размер кода VS быстрота"  :lol:

ЗЫ
Медленнее будет, т.к. надо будет гораздо больше считать. Мы не берем во внимание линейные функции и другие простые функции. А посчитать полином шестой степени - это относительно много математики. По крайней мере, больше, чем взять число из таблицы и линейно проинтерполировать.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO