Вчера я задал аналогичный вопрос о том, как избежать «скачков» данных при использовании atan2d
. Функция работает в диапазоне от -180 до 180, например:
Когда число превышает 180, оно переходит прямо к -180, что делает линейные графики очень уродливыми и не интуитивно понятными а> читать. Было предложено использовать unwrap
, чтобы исправить это, что, как я думал, и произошло. Однако сегодня я столкнулся с графиком, который выглядит так:
.
Прыжок фиксируется, но на его месте линия переводится вверх. Если вы начертите эти три линии, они будут очень близки, как и должно быть (-180 и 180 остаются на том же месте, как и на графике atan2d
). Я хочу, чтобы мой график отражал то, как на самом деле выглядят углы - очень близко друг к другу.
По запросу Дэвида К., вот код, который я использую для вычисления угла для одной из линий. rec,ret
— это упорядоченный набор координат, а recx
и recy
— их значения x и y соответственно. Затем я наношу результат theta_r на обычную фигуру.
for i=1:length(recx)
dy(i,1)=((recy(i)-rety(i)));
dx(i,1)=((recx(i)-retx(i)));
sloperight(i,1)=(dy(i)/dx(i));
theta_r(i,1)=atan2d(dy(i),dx(i));
end
theta_r = 180/pi * unwrap(theta_r * pi/180);
Мой вопрос
Как я могу сделать так, чтобы функция развертывания разворачивалась только в одном направлении (сделайте все углы по часовой стрелке на круге или против часовой стрелки), а не разворачивалась в ближайшем направлении? Или я должен использовать что-то другое, кроме unwrap
, чтобы график выглядел хорошо?
unwrap
). Из документации кажется, чтоunwrap
устранит переходы в одномерном массиве, но не устранит, например, переходы между столбцами двумерного массива. - person David K   schedule 17.07.2014