#matlab
#matlab
Вопрос:
Мне нужно написать небольшую программу, которая проверит, выполняет ли линия (вектор положения) движение строго по часовой стрелке или CCLW. Я пытался использовать atand, чтобы найти угол, но он может перейти от отрицательного к положительному значению, когда он проходит через 90 градусов, у него будет то же самое, если я использую метод наклона.
Однако движение не обязательно должно уменьшаться на 90 градусов, оно может перейти с 89 на 91. Тогда может произойти большой скачок наклона. Любая идея, пожалуйста
Спасибо
Ответ №1:
Одним из способов сделать это было бы вычислить перекрестное произведение последовательных векторов положения. Если все перекрестные произведения положительны, то линия перемещается строго по часовой стрелке. Аналогично, если все они отрицательные, то линия перемещается против часовой стрелки. Если знаки смешаны, то линия не двигалась строго в одном угловом направлении:
function checkRotation(pos)
pos(:,3) = 0;
pos = unique(sum(sign(cross(pos(1:end-1,:), pos(2:end,:))), 2));
if isequal(pos, 1)
disp('Rotation was counter-clockwise');
elseif isequal(pos, -1)
disp('Rotation was clockwise');
else
disp('No strict rotation direction');
end
Создайте несколько случайных векторов положения для -10<=x<=10
и -10<=y<=10
и протестируйте вращение:
>> pos = 20 * rand([10, 2]) - 10 pos = -8.28968405819912 9.26177078573826 -4.75035530603335 0.936114374779359 6.02029245539477 0.422716616080031 -9.41559444875707 -5.36811226582952 8.57708278956089 -0.222045121596661 4.60661725710906 2.48120176347379 -0.227820523928417 3.58271081731495 1.57050122046878 -2.08969568662814 -5.25432840456957 -2.65126702911047 -0.823023436401378 9.75964006323266 >> Проверка вращения (pos) Нет строгого направления вращения
Создайте векторы положения, которые перемещают только CCW, и протестируйте:
>> тета = 0:15:180; >> pos = [cosd(theta)' sind (theta)']; >> Проверка вращения (pos) Вращение было против часовой стрелки
и аналогично для вращения CW:
>> тета = 180:-15:0; >> pos = [cosd(theta)' sind (theta)']; >> Проверка вращения (pos) Вращение было по часовой стрелке
Обратите внимание, что успех обнаружения вращения ограничен вашей частотой дискретизации. Если линия поворачивается против часовой стрелки более чем на 180 градусов при последовательных выборках положения строки, она неотличима от поворота менее чем на 180 градусов по часовой стрелке. направление. Это пример сглаживания.