곡면 애니메이션
이 예제에서는 곡면을 애니메이션하는 방법을 보여줍니다. 특히, 이 예제에서는 구면 조화 함수(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