Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Расчет угла поворота


Автор: evg08 22.9.2010, 19:58
Здравствуйте.
Требуется найти угол поворота моста(Мостом на картинке обозначена линия).Мост может двигаться по часовой стрелке на 190 градусов и против часовой на 190 градусов.С обоих сторон моста стоят датчики,они показывают координату данной стороны моста в мм ,т.е сколько мм проходит сторона моста от начала координат- 0 градусов.Радиус известен,т.о нам известен какой угол пройден стороной моста от начала координат.Но задача состоит найти реально пройденный угол.
Например,сторона x1 повернулась на 190 градусов против часовой стрелки(рис.2)(тот угол ,который и нужно нам найти),а по расчетам получится,что угол равен 170 градусам.
Еще есть условие,что когда сторона моста проходит ноль градусов срабатывает датчик(устанавливается в 1),при повторном прохождении стороной моста сбрасывается.
Необходимо найти реально пройденный угол моста.Спасибо.
Ниже привожу код,как я придумала это реализовать.
Но дело в том ,Что все у меня получается очень частно,а нужно в общем виде и для любого максимального угла поворота моста не обязательно 190 градусов,а может и 390.
Код

x1: REAL; //длина дуги 1 (мм)
x2: REAL; //длина дуги 2 (мм)
t:=pi/180;
//вычисление углов
angle1 := x1 / rad;
angle2 := x2 / rad;
////если датчик номера оборота активен
IF TurnDirection THEN
IF x2<x1 then
//x2 прошел 190 по часовой
angle1:=angle1;
angle2:=angle2+180*t;
END_IF;
IF x2>x1 then
//x2 прошел 190 против часовой
angle1:=-(360*t-angle1);
angle2:=angle2-540*t;//(angle2-180*t)-360*t;
END_IF;
ELSE//если датчик номера оборота не активен
IF x2<x1 THEN
//x2 против 190 по часовой
angle1:=-(360*t-angle1);
angle2:=-(180*t-angle2);
END_IF;
IF x2>x1 THEN
//x2 прошел 190 по часовой
angle1:=angle1;//110
angle2:=angle2-180*t;//290-180
END_IF;

END_IF;
//Вычисление угла моста
Bridge_Angle:= (angle1+ angle2)/2;
//Вычисление фактического положения центра моста 

http://ipicture.ru/Gallery/Viewfull/1276819.html
http://ipicture.ru/Gallery/Viewfull/1276843.html

Автор: nmn 22.9.2010, 21:10
Цитата(evg08 @  22.9.2010,  19:58 Найти цитируемый пост)

Например,сторона x1 повернулась на 190 градусов против часовой стрелки(рис.2)(тот угол ,который и нужно нам найти),а по расчетам получится,что угол равен 170 градусам.

"тот угол" и 190 градусов это одно и тоже?

Цитата(evg08 @  22.9.2010,  19:58 Найти цитируемый пост)
т.о нам известен какой угол пройден стороной моста от начала координат.Но задача состоит найти реально пройденный угол.

"известен какой угол пройден стороной моста" разве не равен "реально пройденный угол"?

Автор: evg08 22.9.2010, 22:41
Цитата

"тот угол" и 190 градусов это одно и тоже?

Да ,это одно и тоже.

Цитата

известен какой угол пройден стороной моста" разве не равен "реально пройденный угол"

Нет,они неодинаковые.
Например,мост был в начальном положении (рис 1): х1 в положении 0 градусов,х2 в положении 180 градусов.Далее он повернулся на некий угол,что  x2 стал в положение 10 градусов от начала координат -0 градусов,а x1 в положение 190 градусов.
Эти переменные показывают положение моста в мм:
Код

x1: REAL; //длина дуги 1 (мм)
x2: REAL; //длина дуги 2 (мм)

Известен радиус rad
Далее по 2 известным величинам вычисляем углы
Код

//вычисление углов
angle1 := x1 / rad;
angle2 := x2 / rad;

Если посмотреть по картинке,то  сторона x2 повернулась совсем не на 10 градусов,а на 190,как и сторона x1.вот нужно и найти реальный угол поворота моста.

Автор: nmn 22.9.2010, 23:11
начальное положение моста какое?
датчики стоят в каких местах? в 0 и 180 или только в 0?

Автор: evg08 22.9.2010, 23:19
По идее начальное положение там ,где стоит датчик оборота ,т.е он является нулем,в данном случае получается,что в нуле,хотя начало измерительной ленты(мм),которая накладывается на круг может быть смещено и начинаться она будет совсем не в нуле.
Датчик только один.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)