2009-11-26 13 views
12

Estoy trabajando en MATLAB y estoy atascado en un problema muy simple: tengo un objeto definido por su posición (x,y) y theta (un ángulo, en grados). Me gustaría trazar el punto y agregar una flecha, comenzando desde el punto y apuntando hacia la dirección definida por el ángulo. En realidad, ni siquiera tiene que ser una flecha, ¡cualquier cosa que muestre gráficamente el valor del ángulo servirá!¿Cómo se muestra una flecha posicionada en un ángulo específico en MATLAB?

Aquí es una imagen que muestra el tipo de cosas que estoy tratando de dibujar:

eliminado enlace ImageShack muertos

Respuesta

13

La función de trazado del temblor() traza flechas como esta. Tome su valor theta y conviértalo en (x, y) coordenadas cartesianas que representan el vector que desea trazar como una flecha y utilícelas como los parámetros (u, v) para temblar().

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]); 

Eche un vistazo en línea a la documentación de Matlab para ver otros tipos de gráficos; hay muchas cosas, incluidas varias parcelas radiales. Están en la sección MATLAB> Funciones> Gráficos> Trazado especializado. Haz "doc carcaj" en la línea de comandos y busca alrededor.

2

Aquí es una respuesta parcial, espero que usted puede imaginar el resto. Encendí el editor de Figuras y abrí las herramientas de la trama. Arrastré una flecha desde la paleta a mi figura. Luego generé una m-file. Esto incluyó la línea:

anotación (figura 1, 'flecha', [0.1489 0.2945], [0.5793 0.6481]);

Por lo tanto, el primer par de coordenadas es el inicio de la flecha. Tendrás que descubrir el extremo puntiagudo (segundo par de coordenadas) usando un poco de trigonometría. Incluso podrías obtener el pequeño arco si juegas un poco más con las herramientas de la trama.

Háganos saber si el trigonómetro le derrota. Oh, y olvidé trazar el punto, ¿pero supongo que puedes resolverlo?

7

Si quiere tratar de hacer algo que se parece a la imagen que está conectado, aquí hay algo de código para ayudarle a hacerlo (NOTA: que primero tendría que descargar la presentación arrow.m por Erik Johnson en el MathWorks File Exchange, que siempre me gusta utilizar para la generación de flechas de cualquier forma y tamaño):

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 

y esto es lo que se vería así:

enter image description here

Luego puede agregar texto a la gráfica (para el ángulo y los valores de coordenadas) usando la función text.

Cuestiones relacionadas