Как отобразить стрелку, расположенную под определенным углом в MATLAB? - PullRequest
13 голосов
/ 26 ноября 2009

Я работаю в MATLAB и застрял на очень простой проблеме: у меня есть объект, определяемый его положением (x,y) и theta (угол в градусах). Я хотел бы построить точку и добавить стрелку, начиная с точки и указывая в направлении, определяемом углом. На самом деле это даже не должна быть стрелка, все, что графически показывает значение угла, подойдет!

Вот изображение, показывающее то, что я пытаюсь нарисовать:

удалена мертвая ссылка ImageShack

Ответы [ 3 ]

14 голосов
/ 26 ноября 2009

Функция построения колчана () отображает стрелки следующим образом. Возьмите ваше значение тета и преобразуйте его в (x, y) декартовы координаты, представляющие вектор, который вы хотите построить в виде стрелки, и используйте их в качестве (u, v) параметров для quiver ().

theta = pi/9;
r = 3; % magnitude (length) of arrow to plot
x = 4; y = 5;
u = r * cos(theta); % convert polar (theta,r) to cartesian
v = r * sin(theta);
h = quiver(x,y,u,v);
set(gca, 'XLim', [1 10], 'YLim', [1 10]);

Просмотрите онлайн документацию Matlab, чтобы увидеть другие типы графиков; есть много, в том числе несколько радиальных участков. Они находятся в разделе MATLAB> Функции> Графика> Специализированная печать. Сделайте "Doc Quiver" в командной строке и просмотреть.

8 голосов
/ 26 ноября 2009

Если вы хотите сделать что-то похожее на изображение, с которым вы связались, вот код, который поможет вам в этом ( ПРИМЕЧАНИЕ: , вам сначала нужно загрузить стрелку отправки . m от Эрик Джонсон на MathWorks File Exchange , который я всегда люблю использовать для создания стрел любой формы и размера):

x = 1;                          % X coordinate of arrow start
y = 2;                          % Y coordinate of arrow start
theta = pi/4;                   % Angle of arrow, from x-axis
L = 2;                          % Length of arrow
xEnd = x+L*cos(theta);          % X coordinate of arrow end
yEnd = y+L*sin(theta);          % Y coordinate of arrow end
points = linspace(0, theta);    % 100 points from 0 to theta
xCurve = x+(L/2).*cos(points);  % X coordinates of curve
yCurve = y+(L/2).*sin(points);  % Y coordinates of curve
plot(x+[-L L], [y y], '--k');   % Plot dashed line
hold on;                        % Add subsequent plots to the current axes
axis([x+[-L L] y+[-L L]]);      % Set axis limits
axis equal;                     % Make tick increments of each axis equal
arrow([x y], [xEnd yEnd]);      % Plot arrow
plot(xCurve, yCurve, '-k');     % Plot curve
plot(x, y, 'o', 'MarkerEdgeColor', 'k', 'MarkerFaceColor', 'w');  % Plot point

А вот как это будет выглядеть:

enter image description here

Затем можно добавить текст на график (для значений угла и координат), используя функцию text.

2 голосов
/ 26 ноября 2009

Вот частичный ответ, я полагаю, вы можете выяснить остальное. Я запустил редактор фигур и открыл инструменты для построения графика. Я перетащил стрелку из палитры на свою фигуру. Затем я сгенерировал m-файл. Это включало строку:

аннотация (рисунок 1, «стрелка», [0,1489 0,2945], [0,5793 0,6481]);

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

Дайте нам знать, если триг победит вас. О, и я забыл обговорить суть, но я думаю, вы можете понять это?

...