Main Content

곡면 애니메이션

이 예제에서는 곡면을 애니메이션하는 방법을 보여줍니다. 특히, 이 예제에서는 구면 조화 함수(Spherical Harmonic)를 애니메이션합니다. 구면 조화 함수는 푸리에 급수가 구면에 적용된 것으로 지구의 자유 진동을 모델링하는 데 사용할 수 있습니다.

구면 그리드 정의

구면 그리드에 점 집합을 정의하여 구면 조화 함수를 계산합니다.

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

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

구면 조화 함수 계산

반지름이 5인 구 곡면에 차수 6, 계수 1, 진폭 0.5인 구면 조화 함수를 계산합니다. 그런 다음 이 값을 카테시안 좌표(Cartesian Coordinate)로 변환합니다.

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

구 곡면에서 구면 조화 함수 플로팅

surf 함수를 사용하여 구 곡면에서 구면 조화 함수를 플로팅할 수 있습니다.

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

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

곡면 애니메이션

곡면을 애니메이션하려면 For 루프를 사용하여 플롯의 데이터를 변경하십시오. 곡면 데이터를 바꾸려면 surface의 XData, YData, ZData 속성을 새로운 값으로 설정하십시오. 애니메이션 속도를 제어하려면 곡면 데이터를 업데이트한 후에 pause를 사용하십시오.

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

참고 항목

|