Como faço para exibir uma seta posicionada em um ângulo específico em MATLAB?

StackOverflow https://stackoverflow.com/questions/1803043

  •  05-07-2019
  •  | 
  •  

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

Foi útil?

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:

enter descrição da imagem aqui

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top