Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Animar una superficie

Este ejemplo muestra cómo animar una superficie. En concreto, este ejemplo anima un armónico esférico. Los armónicos esféricos son versiones esféricas de la serie de Fourier y se pueden emplear para modelar las oscilaciones libres de la Tierra.

Definir la cuadrícula esférica

Defina un conjunto de puntos en una cuadrícula esférica para calcular el armónico.

theta = 0:pi/40:pi;
phi = 0:pi/20:2*pi;

[phi,theta] = meshgrid(phi,theta);

Calcular el armónico esférico

Calcule el armónico esférico con un grado seis, del orden de uno, y una amplitud de 0,5 en la superficie de una esfera con un radio igual a cinco. Después, convierta los valores a coordenadas cartesianas.

degree = 6;
order = 1;
amplitude = 0.5;
radius = 5;

Ymn = legendre(degree,cos(theta(:,1)));
Ymn = Ymn(order+1,:)';
yy = Ymn;

for kk = 2: size(theta,1)
    yy = [yy Ymn];
end

yy = yy.*cos(order*phi);

order = max(max(abs(yy)));
rho = radius + amplitude*yy/order;

r = rho.*sin(theta);
x = r.*cos(phi);
y = r.*sin(phi);
z = rho.*cos(theta);

Representar el armónico esférico en la superficie de una esfera

Utilizando la función surf, represente el armónico esférico en la superficie de la esfera.

figure
s = surf(x,y,z);

light
lighting gouraud
axis equal off
view(40,30)
camzoom(1.5)

Animar la superficie

Para animar la superficie, utilice un bucle for para cambiar los datos en su gráfica. Para sustituir los datos de la superficie, establezca las propiedades XData, YData y ZData de la superficie en valores nuevos. Para controlar la velocidad de la animación, utilice pause después de cargar los datos de la superficie.

scale = [linspace(0,1,20) linspace(1,-1,40)];

for ii = 1:length(scale)

    rho = radius + scale(ii)*amplitude*yy/order;

    r = rho.*sin(theta);
    x = r.*cos(phi);
    y = r.*sin(phi);
    z = rho.*cos(theta);

    s.XData = x;
    s.YData = y;
    s.ZData = z;

    pause(0.05)
end

Consulte también

|