Como faço para exibir uma seta posicionada em um ângulo específico em MATLAB?
Pergunta
Eu estou trabalhando em MATLAB e eu estou preso em um problema muito simples: Eu tenho um objeto definido por sua (x,y)
posição e theta
(um ângulo, em graus). Gostaria de traçar o ponto e adicionar uma seta, a partir do ponto e apontando na direção definida pelo ângulo. Ele realmente não tem sequer a ser uma seta, qualquer coisa mostrando graficamente o valor do ângulo fará!
Aqui está uma foto mostrando o tipo de coisa que eu estou tentando desenhar:
removido ligação ImageShack mortos
Solução
O quiver () plotagens de função setas como este. Leve o seu valor teta e convertê-lo para (x, y) coordenadas cartesianas representando o vetor que deseja trama como uma seta e utilizá-las como o (u, v) parâmetros para 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]);
Dê uma olhada através on-line da documentação Matlab para ver outros tipos de gráficos; há muito, incluindo várias parcelas radiais. Eles estão no MATLAB> Funções> Gráficos> Especializada plotagem seção. Fazer "quiver doc" na linha de comando e navegar ao redor.
Outras dicas
Se você quiser tentar e fazer algo que se parece com a imagem é ligada ao, aqui está algum código para ajudá-lo a fazê-lo ( NOTA: você primeiro tem que baixar a apresentação arrow.m por Erik Johnson na Troca MathWorks arquivo, que eu sempre gosto de usar para gerar setas de qualquer forma e tamanho):
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
E aqui está o que ele ficaria assim:
Você pode então adicionar texto para o enredo (para o ângulo e os valores da coordenada) usando o text
função.
Aqui está uma resposta parcial, espero que você pode descobrir o resto. I despediu-se o editor Figuras e abriu as ferramentas de enredo. Eu arrastei uma seta da paleta para a minha figura. Então eu gerado um arquivo-m. Isto incluiu a linha:
anotação (Figura 1, 'seta', [0,1489 0,2945], [0,5793 0,6481]);
Assim, o primeiro par de coordenadas é o início da seta. Você vai ter que descobrir a extremidade pontiaguda (segundo par de coordenadas), usando um pouco de trigonometria. Você pode até mesmo ser capaz de obter o pequeno arco se você fizer um pouco mais de brincar com as ferramentas da trama.
Deixe-nos saber se as derrotas trig você. Ah, e eu esqueci de traçar o ponto, mas eu acho que você pode descobrir isso?