roboforum.ru

Технический форум по робототехнике.

Энциклопедия по робототехнике - Поиск пути на карте (обсужд.)

Вопросы не попавшие в другие категории.

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение =DeaD= » 21 дек 2007, 13:58

Digit писал(а):так вроде того, что берем один отрезок и проверяем две точки другого на принадлежность к отрезку.
Потом наоборот...
Но вообще, канеш, да. Вариантов много... Я чего-то не про все сообразил :)
По-любому получится не упрощение текста, а наоборот.

При этом не только текста - там еще и вычислений будет немерянно.

Добавлено спустя 2 часа 29 минут 3 секунды:
Digit писал(а):Ну и рисунки добавить вариантов взаимного расположения отрезков - проиллюстрировать ими каждый из подробно описываемых шагов... Я завтра днем нарисую.

Рисунки я уже сделал, а вот разместились они коряво, весь текст поехал :( можешь посмотреть, может какие-то идеи будут?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение Digit » 21 дек 2007, 14:04

Сейчас постараюсь глянуть... Сорьки, у меня тут начальство заболело "быстронахом" :o Поэтому не нарисовал сам

Добавлено спустя 3 минуты 33 секунды:
Например, так пойдет?
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение =DeaD= » 24 дек 2007, 09:50

Digit писал(а):Например, так пойдет?

Вроде почти так же, ладно, оставим эту тему пока, не умрут читатели :)

Я вот про дальше думаю - надо наверное начинать библиотеки писать под всё описанное "счастье" :)

И тут начинаются вопросы - как к этой теме подходить - наворочено или примитивно?

По хорошему можно сделать классы с непрямым доступом к полям, можно сделать классы с доступом к полям, а можно вообще структуры и функции.

У кого какие мысли будут? Я пока думаю в сторону классов с прямым доступом к полям, а потом, если что закрыть доступ.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение Vooon » 24 дек 2007, 10:35

мне кажется лучше классами с закрытыми полями, хотя, как удобней будет так и делать.
ну и раз мы выбрали C++ то структуры с функциями фтопку :roll:
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение Digit » 24 дек 2007, 10:43

Я тоже за классы с закрытыми полями :)
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение =DeaD= » 24 дек 2007, 10:55

Vooon писал(а):мне кажется лучше классами с закрытыми полями, хотя, как удобней будет так и делать.
ну и раз мы выбрали C++ то структуры с функциями фтопку :roll:


Digit писал(а):Я тоже за классы с закрытыми полями :)


Я боюсь с закрытыми полями тормозить будет :)
Что на эту тему скажете?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение lebaon » 24 дек 2007, 20:17

если надо - откроем :wink:
для оптимизации можно и на асме переписать :crazy:
Аватара пользователя
lebaon
Безбашенный Теоретик
 
Сообщения: 1137
Зарегистрирован: 07 янв 2006, 18:30
Откуда: Подмосковье

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение =DeaD= » 25 дек 2007, 09:01

lebaon писал(а):если надо - откроем :wink:
для оптимизации можно и на асме переписать :crazy:

Уважаемый теоретик, мы сейчас обсуждаем сугубо практический вопрос, вы уверены, что вы хотите в этом участвовать? :ROFL:
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение Digit » 25 дек 2007, 10:58

=Dead=, честно говоря не встречал каких-то исследований на тему увеличения тормозов за счет классов (применительно к embedded-системам). То, что будет медленнее - чевидно, т.к. больше вызовов функций и т.п. А вот критично ли это будет - не знаю и нигде не встречал информации.
Кстати, высока вероятность, что зависеть будет от компилятора.

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

Нормуль?
Тогда желающим оптимизировать есть возможность переписать библу математическую с ассемблерными вставками или вообще целиком на асме для ускорения быстродействия. И все это дело останется совместимым.
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение =DeaD= » 25 дек 2007, 11:02

Digit писал(а):=Dead=, честно говоря не встречал каких-то исследований на тему увеличения тормозов за счет классов (применительно к embedded-системам). То, что будет медленнее - чевидно, т.к. больше вызовов функций и т.п. А вот критично ли это будет - не знаю и нигде не встречал информации.
Кстати, высока вероятность, что зависеть будет от компилятора.

От компилятора возможно зависит, хотя может он и будет встраивать "inline" всё это, если назначишь "оптимизировать скорость, а не размер". Просто весь код потом переписывать. И смысл закрывать переменные есть только если какие-то проверки на них цеплять, а это 100% тормоза лишние, даже если "inline" всё делать.

Digit писал(а):Ну, давай может так: библиотеку с математикой делать без классов - чисто функциями и структурами. Математики же много будет. А все "большие" вещи и уникальные в рамках робота (карта, например, - экземпляр этого класса же теоретически будет один на всего робота) делать классами.

Нормуль?

Тогда желающим оптимизировать есть возможность переписать библу математическую с ассемблерными вставками или вообще целиком на асме для ускорения быстродействия. И все это дело останется совместимым.

Я вот тоже к этому склоняюсь. Пожалуй так и сделаем.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение Digit » 25 дек 2007, 14:22

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

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение =DeaD= » 25 дек 2007, 18:23

Digit писал(а):Коли делаем так, как предложено, то надо некоторый план. Возможно, детальный - с названиями функций и парамтрами. Тогда каждый сможет писать кусок и знать, что это будет совместимо с тем, что другие пишут.
А если делать этот план в вики, то можно сделать практически он-лайн помощь по всем функциям библиотек, и по всем классам...

Думаю сначала поробую сделать набросок сам, потом выложу и там посмотрим как организовать коллективную работу.

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

Еще надо рабочее место расписать для программирования под ПК.

Против C++ Builder'а никто ничего против не имеет?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение Vooon » 25 дек 2007, 18:39

=DeaD= писал(а):Еще надо рабочее место расписать для программирования под ПК.

Против C++ Builder'а никто ничего против не имеет?


вобщем не против, но больше за GCC (чисто шкурный интерес :oops: )
одним словом - делать как можно больше чтоб соответствовало ANSI
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение =DeaD= » 26 дек 2007, 09:48

Vooon писал(а):вобщем не против, но больше за GCC (чисто шкурный интерес :oops: )
одним словом - делать как можно больше чтоб соответствовало ANSI

Это я тоже за совместимость с GCC/ANSI, потому как стандарт.
Торжественно обещаю сделать всё что будет в силах!!! :)

Добавлено спустя 14 часов 53 минуты 36 секунд:
Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.)
В общем вот первые результаты:

Определения базовых типов и простейших функций (чтобы при переносе между платформами где другие типы (на ARM, например) не переписывать код):
Код: Выделить всёРазвернуть
typedef double rfwFloat;
typedef int rfwInt;

rfwFloat max(rfwFloat a,rfwFloat b)
{
  if( a>b ){
    return a;
  }else{
    return b;
  };
};

rfwFloat min(rfwFloat a,rfwFloat b)
{
  if( a<b ){
    return a;
  }else{
    return b;
  };
};


Определения базовых геометрических типов данных:
Код: Выделить всёРазвернуть
typedef struct{
  rfwFloat x,y;
} rfwPoint;

typedef struct{
  rfwFloat a,b,c;
} rfwLine;

typedef struct{
  rfwFloat xa,ya,xb,yb;
} rfwSection;


Определения базовых функций:
Код: Выделить всёРазвернуть
rfwLine rfwGetLine(rfwPoint p1, rfwPoint p2)
{
  rfwLine l;
  l.a=p2.y-p1.y;
  l.b=p1.x-p2.y;
  l.c=-l.a*p1.x-l.b*p1.y;
  return l;
};

rfwInt rfwLinesCrossing(rfwLine L1,rfwLine L2,rfwPoint &P)
{
  rfwFloat d=L1.a*L2.b-L1.b*L2.a;
  rfwFloat d1=L2.c*L1.b-L2.b*L1.c;
  rfwFloat d2=L1.c*L2.a-L2.c*L1.a;
  if(d==0){
    if(d1==0 && d2==0){
      return 0; //Same line
    }else{
      return -1; //Empty
    };
  }else{
    P.x=d1/d;
    P.y=d2/d;
    return 1; //Point
  };
};

rfwInt rfwSectionsCrossing(rfwSection S1,rfwSection S2,rfwPoint &P,rfwSection &S)
{
  rfwFloat u,v;
  rfwLine L1,L2;
  L1.a=S1.xa-S1.xb; L1.b=S2.xa-S2.xb; L1.c=S1.xa-S2.xa;
  L2.a=S1.ya-S1.yb; L2.b=S2.ya-S2.yb; L2.c=S1.ya-S2.ya;
  rfwFloat d=L1.a*L2.b-L1.b*L2.a;
  rfwFloat d1=L2.b*L1.c-L2.c*L1.b;
  rfwFloat d2=L1.c*L2.a-L2.c*L1.a;
  //printf("d=%d\nd1=%d\nd2=%d\n",d,d1,d2);
  if(d==0){
    if(d1==0 && d2==0){
      //Same line
      rfwFloat length1=(S1.xb-S1.xa)*(S1.xb-S1.xa)+(S1.yb-S1.ya)*(S1.yb-S1.ya);
      rfwFloat u2a=((S2.xa-S1.xa)*(S1.xb-S1.xa)+(S2.ya-S1.ya)*(S1.yb-S1.ya))/length1;
      rfwFloat u2b=((S2.xb-S1.xa)*(S1.xb-S1.xa)+(S2.yb-S1.ya)*(S1.yb-S1.ya))/length1;
      rfwFloat max_u=max(u2a,u2b);
      rfwFloat min_u=min(u2a,u2b);
      if(max_u<0 || min_u>1){
        return -1; //Empty
      }else{
        u2a=max(0,min_u);
        u2b=min(1,max_u);
        S.xa=S1.xa+u2a*(S1.xb-S1.xa);
        S.ya=S1.ya+u2a*(S1.yb-S1.ya);
        S.xb=S1.xa+u2b*(S1.xb-S1.xa);
        S.yb=S1.ya+u2b*(S1.yb-S1.ya);
        return 0; //Section S1+u*(S2-S1), where u2a<=u<=u2b
      };
    }else{
      return -1; //Empty
    };
  }else{
    u=d1/d;
    v=d2/d;
    if(u>=0 && u<=1 && v>=0 && v<=1){
      P.x=S1.xa+u*(S1.xb-S1.xa);
      P.y=S1.ya+u*(S1.yb-S1.ya);
      return 1; //Point
    }else{
      return -1; //Empty
    };
  };
};


PS: Естественно у меня это нормально разнесено по .h и .cpp файлам! Даже не думайте умничать на эту тему! :)

PPS: Функция пересечения отрезков протестирована немного уже, функция пересечения прямых - пока нет.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Энциклопедия по робототехнике - Поиск пути на карте (обсужд.

Сообщение Vooon » 26 дек 2007, 10:31

создал svn репо: svn://roboforum.ru/public/findapath
но он пока недоступен - нужно перезапустить svnserve

Добавлено спустя 5 минут 24 секунды:
Digit писал(а):Коли делаем так, как предложено, то надо некоторый план. Возможно, детальный - с названиями функций и парамтрами. Тогда каждый сможет писать кусок и знать, что это будет совместимо с тем, что другие пишут.
А если делать этот план в вики, то можно сделать практически он-лайн помощь по всем функциям библиотек, и по всем классам...


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

пример:
Код: Выделить всёРазвернуть
   /**
    * This function puts a character into the USART output queue for
    * transmission.
    *
    * \param ch character to be transmitted
    * \return ch on success, -1 on error (queue full)
    */
   int16_t putch(char ch);


Добавлено спустя 10 минут 35 секунд:
и вот пример сгенеренной документации doc/usart/index.html
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Пред.След.

Вернуться в Обо всём

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

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