реклама на сайте
подробности

 
 
> Приведение в полярных координатах
Misile_Inc
сообщение Jul 19 2012, 12:30
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 30-08-11
Из: Санкт-Петербург
Пользователь №: 66 926



Здравствуйте, есть такая задача:
Начальные условия:
Два орудия направлены в одну точку на расстоянии N метров от линии их стояния.
Известны углы, на которые повернуты оба орудия.
Расстояния N, расстояние между точками стояния орудий не известны и не могут быть введены в систему оператором орудий.
Таких точек можно получить несколько на этапе настройки.


Задача:
В "рабочем" режиме дно из орудий постоянно поворачивается и сообщает свои координаты по каналу связи (является ведущим).
Необходимо перемещать ведомое орудие так, чтобы точка пересечения осей стволов обоих орудий (точка, в которую смотрят оба ствола) перемещалась по линии, параллельной линии стояния орудий и находящейся на расстоянии N метров от линии стояния.


Беда в том, что вычислительные возможности системы управления ведомым, реализованной на 8-бит микроконтроллере, очень скудны (она к тому же еще кучу функций выполняет).
Подскажите, как лучше решить задачу, сэкономив вычислительные ресурсы.

Надеюсь, не запутал.
Спасибо!

Сообщение отредактировал Misile_Inc - Jul 19 2012, 13:58
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 23)
Misile_Inc
сообщение Jul 19 2012, 13:56
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 30-08-11
Из: Санкт-Петербург
Пользователь №: 66 926



Еще вопрос: Я так понимаю, если потребуется выбирать цель не параллельно линии стояния, а на заданном радиусе от ведущего (ведущий и ведомый внутри окружности), подход к решению задачи будет аналогичен решению этой?
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jul 19 2012, 14:00
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(Misile_Inc @ Jul 19 2012, 16:30) *
Надеюсь, не запутал.
Спасибо!

Тоже надеюсь, что не только меня.
Go to the top of the page
 
+Quote Post
Misile_Inc
сообщение Jul 19 2012, 14:19
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 30-08-11
Из: Санкт-Петербург
Пользователь №: 66 926



Попробую нарисовать.
Вот. Известно несколько пар (a;b). Далее по введенному a надо найти b.
Пары углов получаем вручную при установке оборудования.
При следующем включении взаимное расположение оборудования может измениться.
Расстояние до целевой линии тоже

Вот иллюстрация второй задачи.

Сообщение отредактировал Misile_Inc - Jul 19 2012, 14:32
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jul 19 2012, 14:28
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(Misile_Inc @ Jul 19 2012, 18:19) *
Попробую нарисовать.

А где N?

Цитата(Misile_Inc @ Jul 19 2012, 18:19) *
Вот. Известно несколько пар (a;b). Далее по введенному b надо найти a.

Так кто ведущий, а кто ведомый?
Go to the top of the page
 
+Quote Post
Misile_Inc
сообщение Jul 19 2012, 14:33
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 30-08-11
Из: Санкт-Петербург
Пользователь №: 66 926



Цитата(Tanya @ Jul 19 2012, 18:27) *
А где N?

N- расстояние между черными параллельными линиями в первой задаче (которые соединены цветными лучами).
Но оно не известно, как говорилось выше.
Известны только пары углов (a;b).

Цитата(Tanya @ Jul 19 2012, 18:28) *
Так кто ведущий, а кто ведомый?

Поправил. Но ведь это не существенно для решения задачи.
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Jul 19 2012, 16:31
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Я бы делал "в лоб" - при включении инициализация, нахождение текущего (на данный сеанс работы) N - аналитически по тригонометрии (должно решаться тривиально), в железе - по таблично заданной функции. А далее просто - b является при известном N функцией от a, аналитически она выразится через какую-то тригонометрию, эту функцию в виде таблицы закладываете хоть в ведущего хоть в ведомого (у кого ресурсов больше), вычисляете b. Если нужна точность - интерполируете эту таблично заданную функцию до нужной степени точности на этапе расчета b. Повторюсь что сам расчет можно вести хоть в ведущем, хоть в ведомом, хоть половину там и там.

Для случая прямой уравнение связи параметров такое: ctg(a) + ctg(cool.gif = M/N, где M - расстояние между орудиями (5-й класс средней школы). При стартовой привязке по нескольким парам углов вычисляете поточнее ваше значение M/N для данной конфигурации, запоминаете его и все. Расчет угла ведомого: считаете (по таблице с интерполяцией) котангенс угла ведущего, вычитаете его из имеющегося параметра M/N и берете арккотангенс результата (по таблице с интерполяцией).
Для других случаев просто будут другие уравнения связи параметров. И можно рисовать любые фигуры, которые луч ведущего пересекает только один раз при любом своем угле.
Go to the top of the page
 
+Quote Post
Misile_Inc
сообщение Jul 20 2012, 06:15
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 30-08-11
Из: Санкт-Петербург
Пользователь №: 66 926



_Ivana, спасибо большое! sm.gif буду вспоминать 5й класс.
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Jul 20 2012, 10:47
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Пожалуйста sm.gif Кстати, для случая окружности с центром в одном из орудий уравнение выглядит так:
Код
ctg(b) = (M/R - cos(a))/sin(a)

M/R аналогично находите из первых привязок, далее по a получаете b через пару табличных функций (для sin и cos одна таблица четверти периода). Только пара моментов:
1) если решать относительно a (с центром в ведомом), то придется численно решить вышеприведенное уравнение относительно a, что немного сложнее
2) нули синуса (как теоретические так и машинные) = бесконечность котангенса и, как следствие, +- нулевой угол, обойдете при реализации самостоятельно, это просто.
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Aug 15 2012, 20:34
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Поставил Матлаб, нравится, балуюсь sm.gif
Для линии:
CODE
M = 5;
N = 3;

x_i = zeros(1, 2);
x_i(2) = M;
y_i = zeros(1, 2);
x = 0;
y = 0;
al_eps = 0.01*pi;
al = al_eps;
while al <= (pi - al_eps)
be = acot(M/N - cot(al));
% if be < 0 be = be + pi; end

k1 = tan(al);
k2 = -tan(be);
x0 = k2*M/(k2 - k1);
x = [x x0];
y = [y x0*k1];

al = al + 0.001*pi;
end
x(1) = []; y(1) = [];

figure(1)
clf reset
p_y_i = plot(x_i, y_i, 'or');
set(p_y_i,'LineWidth', 4);
title('Линия на расстоянии 3 от линии ведущий - ведомый')
xlabel('Ведущий: 0, ведомый: 5')
text(1, -2, 'A')
text(x_i(2) + 1, -2, 'B')
hold on
plot(x, y, '-x')
hold off
grid on
axis equal

Для окружности:
CODE
M = -2;
N = 3;

x_i = zeros(1, 2);
x_i(2) = M;
y_i = zeros(1, 2);
x = 0;
y = 0;
al = 0;
while al <= 2*pi
be = acot( (M/N - cos(al)) / sin(al) );
% if be < 0 be = be + pi; end

k1 = tan(al);
k2 = -tan(be);
x0 = k2*M/(k2 - k1);
x = [x x0];
y = [y x0*k1];

al = al + 0.001*pi;
end
x(1) = []; y(1) = [];

figure(1)
clf reset
p_y_i = plot(x_i, y_i, 'or');
set(p_y_i,'LineWidth', 4);
title('Окружность радиуса 3 с центром в ведущем')
xlabel('Ведущий: 0, ведомый: -2')
text(0.1, -0.2, 'A')
text(x_i(2) + 0.1, -0.2, 'B')
hold on
plot(x, y, '-x')
hold off
grid on
axis equal


Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Aug 15 2012, 21:57
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



UPD все-таки непривычно мыслить многомерными векторами.... Вот так получше будет, методически правильнее sm.gif
CODE
M = 5;
N = 3;
al = 0.01*pi:0.001*pi:(pi - 0.01*pi);
be = acot(M./N - cot(al));
x = -tan(be).*M./(-tan(be) - tan(al));
y = x.*tan(al);

clf reset
set(plot([0, M], [0, 0], 'or'), 'LineWidth', 4);
title('Линия на расстоянии 3 от линии ведущий - ведомый')
xlabel('Ведущий: 0, ведомый: 5')
text(1, -2, 'A')
text(M + 1, -2, 'B')
hold on
plot(x, y, '-x')
hold off
grid on
axis equal

CODE
M = -2;
N = 3;
al = 0:0.001*pi:2*pi;
be = acot( (M./N - cos(al)) ./ sin(al) );
x = -tan(be).*M./(-tan(be) - tan(al));
y = x.*tan(al);

clf reset
set(plot([0, M], [0, 0], 'or'), 'LineWidth', 4);
title('Окружность радиуса 3 с центром в ведущем')
xlabel('Ведущий: 0, ведомый: -2')
text(0.1, -0.2, 'A')
text(M + 0.1, -0.2, 'B')
hold on
plot(x, y, '-x')
hold off
grid on
axis equal
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Aug 16 2012, 19:17
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Наконец-то я частично решил эту примитивную задачку sm.gif
Если исходная кривая задается в аналитическом (или табличном) виде в полярных координатах с центром в ведущем - например как r(a), то угол b ведомого, расположенного в точке (М, 0) будет выражаться: b = acot( (M/r(a) - cos(a)) / sin(a) )
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение


Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение

 
Go to the top of the page
 
+Quote Post
Mrrl
сообщение Aug 20 2012, 14:01
Сообщение #13





Группа: Новичок
Сообщений: 9
Регистрация: 20-08-12
Пользователь №: 73 198



Вот только параметры функции r(a)/M придется как-то получать ("на этапе настройки"). Для приведенных картинок это может быть не совсем тривиально sad.gif
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Aug 20 2012, 18:16
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Очень просто. Считаем r(a) = N*r1(a), где r1(a) - "единичная" функция фигуры, N - коэффициент её масштаба. При привязке задаем любой a0, считываем соответствующий ему b0, по ним из уравнения (что тривиально делается аналитически) находим M/N - наш неизвестный безразмерный коэффициент, определяющий масштаб фигуры относительно расстояния между орудиями.
Go to the top of the page
 
+Quote Post
Mrrl
сообщение Aug 20 2012, 19:23
Сообщение #15





Группа: Новичок
Сообщений: 9
Регистрация: 20-08-12
Пользователь №: 73 198



Да, если ведущий действительно в центре подобия, и ориентация фигуры ему известна.
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Aug 20 2012, 19:33
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Поэтому я и писал про частичное решение. Если ведущий не в центре подобия - тогда... надо подумать sm.gif Овалы я вроде так рисовал, а в общем случае... Есть одна идейка, также на уровне 5-го класса, если получится - сейчас проверю.
Ну а если ему неизвестна ориентация фигуры - тогда, простите, решения не существует - фигуры нет как таковой sm.gif

ЗЫ - вот, действительно снова 5 класс. И смещение из центра подобия ведущего, и поворот.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Mrrl
сообщение Aug 20 2012, 19:45
Сообщение #17





Группа: Новичок
Сообщений: 9
Регистрация: 20-08-12
Пользователь №: 73 198



Фигура есть, просто у нее больше параметров. И для настройки потребуется больше одной точки. Например, цель движется по произвольной кривой второго порядка - ну и что, за 5 прицелов функцию a®/M можно найти. Но лучше это делать не на борту, а на командирском лаптопе.
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Aug 20 2012, 20:03
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Вы расширяете задачу весьма. Хорошо, я согласен, если фигура и орудия заданы стационарно - то можно привязаться по большему числу точек - если заранее известны параметры фигуры. Кстати, если неизвестны - то метод привязки по большому числу точек вырождается в простое очерчивание - то есть прогоняем ведущего по всему кругу с малым шагом, запоминаем отсчеты ведомого - и потом интерполируем эту таблицу при работе. Но ведь вы же сейчас скажете - а если фигура нестационарна? sm.gif

ЗЫ вы, кстати, случайно не начальник автора темы? biggrin.gif
Go to the top of the page
 
+Quote Post
Mrrl
сообщение Aug 21 2012, 02:59
Сообщение #19





Группа: Новичок
Сообщений: 9
Регистрация: 20-08-12
Пользователь №: 73 198



Случайно нет. Да, в обеих формулировках задачи ведущий находится в центре подобия, и калибровать нужно только один параметр (кстати, из исходной формулировки не следует, что известно направление прямой, соединяющей орудия - но это уже вопрос к автору).
В случае нестационарной фигуры задача неразрешима. В случае, когда луч, проведенный из ведущего, пересекает фигуру в двух и более точках (как у вас на последних картинках) - тоже.
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Aug 21 2012, 09:35
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Цитата
кстати, из исходной формулировки не следует, что известно направление прямой, соединяющей орудия - но это уже вопрос к автору

Следует и известно. Просто у автора неявно полагается, что углы a и b отсчитываются именно от прямой соединяющей орудия. Но если расширить задачу и считать что это не так - придется вводить прямую отсчета углов относительно фигуры и линии орудий.
Цитата
В случае нестационарной фигуры задача неразрешима.

Очень даже разрешима. Только добавляется параметрические зависимости параметров системы (расстояния между орудиями, вид/положение/направление/размер фигуры) от времени. Если все эти зависимости известны - решение то же самое. Хотя с привязкой немножко посложнее sm.gif
Цитата
В случае, когда луч, проведенный из ведущего, пересекает фигуру в двух и более точках (как у вас на последних картинках) - тоже.

Ну, смотря что считать решением. Если только строгую однорзначную функциональную зависимость b(a), то нет. А если допускать счетную неоднозначность решения - 2 угла b при одном a, или же если считать задачу не потенциальной - то есть зависимой от пути прихода a в свое значение (как у меня на последних картинках и сделано) - то все очень даже имеет решение - что и демонстрируют мои последние картинки sm.gif
Go to the top of the page
 
+Quote Post
Mrrl
сообщение Aug 21 2012, 10:08
Сообщение #21





Группа: Новичок
Сообщений: 9
Регистрация: 20-08-12
Пользователь №: 73 198



Как только зависимость b(a) перестает быть однозначной - мы приходим к нелинейным уравнениям и прочм неявным функциям. А это уже не 5-й класс (в отличие от котангенса) sm.gif По картинкам трудно понять, а что же именно там сделано sad.gif
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Aug 21 2012, 10:26
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Согласен и с тем и с другим sm.gif
В последних картинках фигура задается (в системе с центром в ведущем) параметрическими уравнениями [r(w), a(w)], которые получаются из исходного уравенения фигуры r'(a') в системе координат с центром в другой точке (там же определяется масштаб и поворот фигуры) через перевод в декартову систему координат, линейное смещение осей и перевод обратно в полярную систему с центром в ведущем sm.gif С точки же зрения ведущего, в дальнейшей работе надо "всего лишь" определить в каком текущем множестве кейсе пересечения линий фигуры лежит луч ведущего (из истории его изменения после привязки) и в текущем изменении внутри границ кейса считать по формуле, а при переходе границы кейса - менять кейс sm.gif
Go to the top of the page
 
+Quote Post
Mrrl
сообщение Aug 21 2012, 11:29
Сообщение #23





Группа: Новичок
Сообщений: 9
Регистрация: 20-08-12
Пользователь №: 73 198



"считать по формуле"? По какой? Даже в простейшем случае окружности со смещенным центром (в точку (c,a0) относительно ведущего) мы имеем уравнение
r(a)^2-2*c*r(a)*cos(a-a0)+(c^2-R^2)=0, где R - радиус окружности. При этом величины R,c,a0 и M (расстояние до ведомого) заранее не определены. Ну, квадратное уравнение мы решить можем. Но что за формула будет в случае сердечек и звездочек, боюсь даже представить sm.gif
Go to the top of the page
 
+Quote Post
_Ivana
сообщение Aug 21 2012, 12:38
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Насчет "заранее не определены" - да, я уже отмечал что привязка несколько усложнится sm.gif
А насчет "по какой формуле" - давайте декомпозируем задачу. Допустим, мы знаем при любом a длину отрезка r от точки ведущего до нужной точки фигуры - то есть знаем r(a), даже в случае неоднозначного функционального определения - через кейсы и путь прихода в данный угол (разумеется, считая что a изменяется непрерывно от времени а не скачками). Так вот, если мы знаем r(a) для любого a, то b считается по формуле, написанной на предыдущей странице. Теперь остается только вопрос определения r(a) при сложных фигурах и неоднозначных функциях. Тут можно посоветовать следующее (это не единственный вариант) - вместо прямого расчета r(a) с такими фигурами, мы составляем таблицу (хоть через то же наше параметрическое задание фигур) с необходимым шагом по a (точнее с необходимым шагом по параметру, приводящему к необходимому шагу по a) и при работе по нашему текущему a получаем текущее r любым из методов интерполяции sm.gif
UPD это все просто в случае заранее известных всех параметров фигуры относительно ведущего - но при этом расстояние ведущий-ведомый может плавать, т.к. оно вообще не фигурирует при определении фигуры относительно ведущего и используется только при финальном расчете b. В случае же заранее неизвестных каких-либо параметров фигуры при известных некоторых её показателях (фразу звучит забавно, но это из серии "некая кривая второго порядка" sm.gif ) задача действительно ещё немножко усложняется, примерно как вы показали на примере окружности заранее неизвестного радиуса и центра sm.gif Но тут уже все определяется соотношением того, что мы заранее знаем о фигуре а что нет.

В принципе, при статической фигуре мы можем вообще просто воткнуть ведомого в любое место, пробежать многочисленными привязками пар a-b по всей фигуре, получить таблицу r(a) с учетом всех кейсов и неоднозначностей, и в дальнейшем использовать её для любого положения ведомого M.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 21:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01652 секунд с 7
ELECTRONIX ©2004-2016