elipse ecuacion codigo matlab plot

codigo - ecuacion de la elipse en matlab



dibujar elipse y elipsoide en MATLAB (6)

He adaptado este excelente guión de trazo de elipse de MATLAB Central para su requisito de equation_ellipse http://img121.imageshack.us/img121/5746/eqn1995.png

function plotEllipse(a,b,C) % range to plot over %------------------------------------ N = 50; theta = 0:1/N:2*pi+1/N; % Parametric equation of the ellipse %---------------------------------------- state(1,:) = a*cos(theta); state(2,:) = b*sin(theta); % Coordinate transform (since your ellipse is axis aligned) %---------------------------------------- X = state; X(1,:) = X(1,:) + C(1); X(2,:) = X(2,:) + C(2); % Plot %---------------------------------------- plot(X(1,:),X(2,:)); hold on; plot(C(1),C(2),''r*''); axis equal; grid; end

Nota: cambie N para definir la resolución de su elipse

Aquí hay una elipse centrada en (10,10) con a = 30 b = 10

Elipse http://img715.imageshack.us/img715/834/59078110.png

¿Cómo dibujo una elipse y un elipsoide usando MATLAB?

(x^2/a^2)+(y^2/b^2)=1

n=40; a=0; b=2*pi; c=0; d=2*pi; for i=1:n u=a+(b-a)*(i-1)/(n-1); for j=1:m v=a+(d-c)*(j-1)/(m-1); x(i,j)=sin(u)*cos(v); y(i,j)=sin(u)*sin(v); z(i,j)=cos(u); end end mesh(x,y,z);

Pero quiero la forma?


Crea dos vectores, una de las coordenadas x de los puntos de la circunferencia del elipsoide, una de las coordenadas y. Haga que estos vectores sean lo suficientemente largos como para satisfacer sus requisitos de precisión. Trace los dos vectores como pares (x, y) unidos. Soltaría los bucles for de tu código, mucho más claro si usas la notación vectorial. También formatearé tu pregunta usando el marcado SO para el código para que todo quede más claro para tu audiencia.


El artículo de Ellipse en Wikipedia tenía un código JavaScript simple para dibujar elipses.

Utiliza la forma paramétrica:

x(theta) = a0 + ax*sin(theta) + bx*cos(theta) y(theta) = b0 + ay*sin(theta) + by*cos(theta)

dónde

(a0,b0) is the center of the ellipse (ax,ay) vector representing the major axis (bx,by) vector representing the minor axis

Traducí el código en una función de MATLAB:

calculateEllipse.m

function [X,Y] = calculateEllipse(x, y, a, b, angle, steps) %# This functions returns points to draw an ellipse %# %# @param x X coordinate %# @param y Y coordinate %# @param a Semimajor axis %# @param b Semiminor axis %# @param angle Angle of the ellipse (in degrees) %# narginchk(5, 6); if nargin<6, steps = 36; end beta = -angle * (pi / 180); sinbeta = sin(beta); cosbeta = cos(beta); alpha = linspace(0, 360, steps)'' .* (pi / 180); sinalpha = sin(alpha); cosalpha = cos(alpha); X = x + (a * cosalpha * cosbeta - b * sinalpha * sinbeta); Y = y + (a * cosalpha * sinbeta + b * sinalpha * cosbeta); if nargout==1, X = [X Y]; end end

y un ejemplo para probarlo:

%# ellipse centered at (0,0) with axes length %# major=20, ,minor=10, rotated 50 degrees %# (drawn using the default N=36 points) p = calculateEllipse(0, 0, 20, 10, 50); plot(p(:,1), p(:,2), ''.-''), axis equal


La forma más simple podría ser utilizar la función Matlab

pdeellip(xc,yc,a,b,phi)

Por ejemplo:

pdeellip(0,0,1,0.3,pi/4)

Sin embargo, esta es una solución simple, es bueno echar un vistazo rápido a cómo se ve la elipse. Si quieres tener una buena trama, mira las otras soluciones.

No sé en qué versión de Matlab se agregó, pero está disponible al menos desde la versión R2012b en adelante.


Las respuestas de Jacob y Amro son muy buenos ejemplos para calcular y trazar puntos para una elipse. Trataré algunas formas fáciles de trazar un elipsoide ...

En primer lugar, MATLAB tiene una función ELLIPSOID incorporada que genera un conjunto de puntos de malla dado el centro elipsoide y las longitudes de semiejes. A continuación, se crean las matrices x , y y z para un elipsoide centrado en el origen con longitudes de semiejes de 4, 2 y 1 para las direcciones x, y y z, respectivamente:

[x, y, z] = ellipsoid(0, 0, 0, 4, 2, 1);

A continuación, puede usar la función MESH para trazarlo y devolver un identificador al objeto de superficie trazado:

hMesh = mesh(x, y, z);

Si desea rotar el elipsoide trazado, puede usar la función ROTAR . Lo siguiente aplica una rotación de 45 grados alrededor del eje y:

rotate(hMesh, [0 1 0], 45);

A continuación, puede ajustar la apariencia de la gráfica para obtener la siguiente figura:

axis equal; %# Make tick mark increments on all axes equal view([-36 18]); %# Change the camera viewpoint xlabel(''x''); ylabel(''y''); zlabel(''z'');

Además, si desea utilizar los puntos de trazado girados para realizar más cálculos, puede obtenerlos del objeto de superficie trazado:

xNew = get(hMesh, ''XData''); %# Get the rotated x points yNew = get(hMesh, ''YData''); %# Get the rotated y points zNew = get(hMesh, ''ZData''); %# Get the rotated z points


Artículo elipse en Wikipedia y matriz de rotación.

Reescribe esas funciones:

  • rotar por rotAngle en sentido antihorario alrededor (0,0)

  • Transformación de coordenadas a (cx, cy)

function [X,Y] = calculateEllipse(cx, cy, a, b, rotAngle) %# This functions returns points to draw an ellipse %# %# @param x X coordinate %# @param y Y coordinate %# @param a Semimajor axis %# @param b Semiminor axis %# @param cx cetner x position %# @param cy cetner y position %# @param angle Angle of the ellipse (in degrees) %# steps = 30; angle = linspace(0, 2*pi, steps); % Parametric equation of the ellipse X = a * cos(angle); Y = b * sin(angle); % rotate by rotAngle counter clockwise around (0,0) xRot = X*cosd(rotAngle) - Y*sind(rotAngle); yRot = X*sind(rotAngle) + Y*cosd(rotAngle); X = xRot; Y = yRot; % Coordinate transform X = X + cx; Y = Y + cy; end

y un ejemplo para probarlo:

[X,Y] = calculateEllipse(0, 0, 20, 10, 0); plot(X, Y, ''b''); hold on; % blue [X,Y] = calculateEllipse(0, 0, 20, 10, 45); plot(X, Y, ''r''); hold on; % red [X,Y] = calculateEllipse(30, 30, 20, 10, 135); plot(X, Y, ''g''); % green grid on;