Main Content

이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

곡면 애니메이션

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

구면 그리드 정의

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

theta = 0:pi/40:pi;                   % polar angle
phi = 0:pi/20:2*pi;                   % azimuth angle

[phi,theta] = meshgrid(phi,theta);    % define the grid

구면 조화 함수 계산

반지름이 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);    % convert to Cartesian coordinates
x = r.*cos(phi);
y = r.*sin(phi);
z = rho.*cos(theta);

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

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

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

light               % add a light
lighting gouraud    % preferred lighting for a curved surface
axis equal off      % set axis equal and remove axis
view(40,30)         % set viewpoint
camzoom(1.5)        % zoom into scene

곡면 애니메이션

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

scale = [linspace(0,1,20) linspace(1,-1,40)];    % surface scaling (0 to 1 to -1)

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;    % replace surface x values
    s.YData = y;    % replace surface y values
    s.ZData = z;    % replace surface z values

    pause(0.05)     % pause to control animation speed
end

참고 항목

|