matlab graphs ii - kaist it academy web service v 2.0 · pdf file ·...

55
MATLAB Graphs II [email protected] 1

Upload: lynhan

Post on 28-Mar-2018

235 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

MATLAB Graphs II

김 탁 은

[email protected]

1

Page 2: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

MATLAB의 3D Plotting 원리

2

… … … … …

… … … … …

Page 3: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

plot3

3

t = 0:0.1:10*pi;

x = exp(-t/20) .* cos(t);

y = exp(-t/20) .* sin(t);

z = t;

plot3( x, y, z, ‘r:’ );

grid on;

• t 가 벡터이므로 수식에서 exp(-t/20), cos(t), sin(t)는 각각 length(t) 길이의 벡터

• 따라서, exp(-t/20) 과 cos(t)는 각각 벡터의 원소 간 곱이므로, “.*” 로 곱셈해야 함

Page 4: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

몇 가지 properties

4

t = 0:0.1:10*pi;

x = exp(-t/20) .* cos(t);

y = exp(-t/20) .* sin(t);

z = t;

plot3( x, y, z, ‘r:’ );

grid on

xlabel(‘x’);

ylabel(‘y’);

h = zlabel(‘z’);

set( h, ‘rotation’, 180 )

Page 5: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

몇 가지 properties

5

t = 0:0.1:10*pi;

x = exp(-t/20) .* cos(t);

y = exp(-t/20) .* sin(t);

z = t;

plot3( x, y, z, ‘r:’ );

grid on

set( gca, ‘box’, ‘on’ );

Page 6: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

mesh

6

… … … … …

… … … … …

[X, Y] = meshgrid(-2:0.25:2);

Z = X .* exp(-X.^2 - Y.^2);

mesh( X, Y, Z );

Page 7: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

mesh

7

… … … … …

… … … … …

>> [X, Y] = meshgrid(1:1:3, 5:1:10)

X =

1 2 3

1 2 3

1 2 3

1 2 3

1 2 3

1 2 3

Y =

5 5 5

6 6 6

7 7 7

8 8 8

9 9 9

10 10 10

벡터 x의 길이만큼 행 생성

벡터 y의 길이만큼 행 생성

Page 8: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

mesh

[X,Y] = meshgrid(x, y) • 주어진 벡터 x를 행렬 x에 대한 각각의 행으로 취함

• 벡터 y를 행렬 Y에 대한 각각의 열로 취함

8

X =

1 2 3

1 2 3

1 2 3

1 2 3

1 2 3

1 2 3

Y =

5 5 5

6 6 6

7 7 7

8 8 8

9 9 9

10 10 10

Page 9: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

meshc, meshz 함수

meshc( X, Y, Z ) • 등고선(contour) 정보를 함께 보여줌

meshz( X, Y, Z ) • mesh 함수와 동일하나, 커튼(curtain) 형태로 표시함

9

[X, Y] = meshgrid(-2:0.25:2);

Z = X .* exp(-X.^2 - Y.^2);

meshc( X, Y, Z );

figure;

meshz( X, Y, Z );

Page 10: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

surf, surfc

surf( X, Y, Z ) • mesh와 동일하나, mesh 함수로부터 얻어진 각 격자에 색이 칠해진 그래프

surfc( X, Y, Z ) • surf 함수와 등고선(contour)을 함께 나타낸 그래프

10

[X, Y] = meshgrid(-2:0.25:2);

Z = X .* exp(-X.^2 - Y.^2);

surf( X, Y, Z );

figure;

surfc( X, Y, Z );

Page 11: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

ezsurf vs. surf

두 함수는 용도가 서로 다름

• ezsurf 함수의 경우, 그래프의 방정식이 주어지는 경우에만 그래프를 그릴 수

있음

• surf 함수는 그래프의 방정식이 주어지지 않아도 수집한 데이터를 바탕으로

그래프를 그릴 수 있음

11

[X, Y, Z] = peaks;

% random noise를 줌

Z = Z + rand(size(Z));

surf(X,Y,Z)

Page 12: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Quiz

토러스의 방정식은 다음과 같습니다. • x(t) = cos(u) * (r + a*cos(v)), y(t) = sin(u) * (r + a*cos(v), z(t) = a*sin(v)

a = 0.5, r = 2일 때, 토러스를 surf 함수를 이용하여 그려봅시다.

12

Page 13: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Quiz Sol.

토러스의 방정식은 다음과 같습니다. • x(t) = cos(u) * (r + a*cos(v)), y(t) = sin(u) * (r + a*cos(v), z(t) = a*sin(v)

a = 0.5, r = 2일 때, 토러스를 surf 함수를 이용하여 그려봅시다.

13

a = 0.5;

r = 2;

u = linspace(0, 2*pi, 40);

v = u;

[U,V] = meshgrid(u, v);

X = cos(U).*(r + a*cos(V));

Y = sin(U).*(r + a*cos(V));

Z = a*sin(V);

surf(X,Y,Z);

axis image;

Page 14: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

surface color shading

shading • surface의 color shading mode를 결정

14

[X, Y, Z] = peaks();

surf( X, Y, Z );

>> shading faceted

>> shading interp

>> shading flat

Page 15: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

NaN으로 불연속 곡선 그리기

NaN (Not a Number) 값을 가지는 부분은 그려지지 않고 hole로 남음

15

[X, Y, Z] = peaks();

Z(30:40, 20:30) = NaN;

surf( X, Y, Z );

t = linspace(0, 2*pi, 100);

y = sin(t);

y(50:60) = NaN;

plot(t, y);

Page 16: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

3D surf plot + NaN

3D 그래프에서 특정 조건을 만족하는 값들만으로 표시된 그래프 그리기 • 예) 함수 값이 1보다 크고 6보다 적은 부분만 표시

16

close all;

[X,Y,Z] = peaks;

surf(X,Y,Z);

ind = find(1 <= Z & Z <= 6);

Z2 = nan(size(Z));

Z2(ind) = Z(ind)+10;

hold on;

s2 = surf(X,Y,Z2)

Page 17: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

contour

[C, h] = contour( Z ) • Z축에 관한 행렬을 입력 받아 등고선을 그리고, contour 행렬 C와 handle h를 반환

[C, h] = contour( Z, k ) • 행렬 Z에 대한 k개의 등고선을 그림 (k 값은 스칼라)

[C, h] = contour( Z, v ) • 행렬 Z에 대한 등고선을 벡터 v 값에 근거하여 그림 (v는 벡터)

• length(v) 개수 만큼의 등고선을 그리며, 그리고자 하는 각 벡터 원소 vi에 대해 f(x, y) = vi인 등고선들을 그림 – 즉, 등고선의 높이가 v에 적힌 숫자들에 해당하는 것들만 그림

17

Page 18: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

contour

아래와 같이 함수 Z = f(X,Y)가 주어졌을 때,

18

x = -3:0.05:3;

y = -1.5:0.025:1.5;

[X,Y] = meshgrid(x,y);

Z = 4*X.^2 - 2.1*X.^4 + X.^6/3 + X.*Y - 4*Y.^2 + 4*Y.^4;

>> [C, h] = contour(Z) >> [C, h] = contour(Z, 20) >> cvals = [-2:.5:2 2.3 3:5 6:2:10];

>> [C, h] = contour(Z, 20)

Page 19: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

contour에 label 붙이기

clabel( C, h, v ) • contour 함수로부터 반환되는 contour matrix C, contour의 핸들 h, 벡터 v의

각 벡터 원소 vi에 대해 f(x, y) = vi인 등고선들의 값을 붙임

19

x = -3:0.05:3;

y = -1.5:0.025:1.5;

[X,Y] = meshgrid(x,y);

Z = 4*X.^2 - 2.1*X.^4 + X.^6/3 + X.*Y - 4*Y.^2 + 4*Y.^4;

cvals = [-2:.5:2 2.3 3:5 6:2:10];

[C, h] = contour(X,Y,Z, cvals);

clabel(C, h, cvals);

Page 20: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

마우스로 선택한 contour에 label 붙이기

clabel( C, h, ‘manual’ ) • contour 함수로부터 반환되는 contour matrix C, contour의 핸들 h, 벡터 v의

각 벡터 원소 vi에 대해 f(x, y) = vi인 등고선들의 값을 붙이는 것은 동일하나, 마우스로 클릭한 등고선에 대해서만 값을 text 로 출력해서 보여줌

20

x = -3:0.05:3;

y = -1.5:0.025:1.5;

[X,Y] = meshgrid(x,y);

Z = 4*X.^2 - 2.1*X.^4 + X.^6/3 + X.*Y - 4*Y.^2 + 4*Y.^4;

cvals = [-2:.5:2 2.3 3:5 6:2:10];

[C, h] = contour(X,Y,Z, cvals);

clabel(C, h, ‘manual’ );

Page 21: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

ezcontour vs. contour

ezcontour는 수식만으로 간단히 쉽게 그릴 수 있음

contour는 ezcontour보다 세밀한 등고선을 그릴 수 있음

21

vs

Page 22: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

contour3

3차원 contour plot을 그려줌 • contour와 함수와 사용 방법 거의 동일

22

x = -3:0.05:3;

y = -1.5:0.025:1.5;

[X,Y] = meshgrid(x,y);

Z = 4*X.^2 - 2.1*X.^4 + X.^6/3 + X.*Y - 4*Y.^2 + 4*Y.^4;

cvals = [-2:.5:2 2.3 3:5 6:2:10];

[C, h] = contour3(X,Y,Z, cvals);

clabel(C, h, cvals);

Page 23: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

contourf

contour plot을 그릴 때 등고선들 사이의 면들에 색을 넣어서 그림 • contour 함수와 사용법, 입출력 매개변수 등이 거의 동일

– contourf( X, Y, Z), contourf( X, Y, Z, k ), contourf( X, Y, Z, v)

23

x = -3:0.05:3;

y = -1.5:0.025:1.5;

[X,Y] = meshgrid(x,y);

Z = 4*X.^2 - 2.1*X.^4 + X.^6/3 + X.*Y - 4*Y.^2 + 4*Y.^4;

cvals = [-2:.5:2 2.3 3:5 6:2:10];

[C, h] = contourf(X,Y,Z, cvals);

clabel(C, h, cvals);

Page 24: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

quiver: vector field plot

24

주로 사용하는 방법은 아래와 같이 contour와 기울기 벡터를 함께 나타냄

[X, Y] = meshgrid(-1.1:0.2:1.1);

quiver(-X, Y);

axis image;

[X, Y] = meshgrid(-2:0.2:2);

Z = (X+Y) .* exp(-X.^2 - Y.^2);

[dX,dY] = gradient(Z, 0.5, 0.5);

contour(X, Y, Z, 10);

hold on;

quiver(X, Y, dX, dY);

hold off;

Page 25: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

quiver

quiver( X, Y, U, V ) • velocity vector (x, y)의 위치에서 (u, v) 방향의 화살표로 나타냄

quiver( U, V ) • velocity vector를 (u, v) 방향의 화살표로 나타냄

• 각 화살표는 x-y 평면 상에 균등하게 배치됨

quiver( U, V, S ) 또는 quiver( X, Y, U, V, S ) • 화살표를 S 크기 만큼 rescaling

quiver( … , LINESPEC ) • 화살표의 선 모양을 설정

• eg)

25

[X, Y] = meshgrid(-1.1:0.2:1.1);

quiver( -X, Y, ‘LineWidth’, 3 );

axis image;

Page 26: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

quiver3

quiver( X, Y, Z, U, V, W ) • velocity vector (x, y, z)의 위치에서 (u, v, w) 방향의 화살표로 나타냄

26

[x,y] = meshgrid(-2:.2:2,-1:.15:1);

z = x .* exp(-x.^2 - y.^2);

[u,v,w] = surfnorm(x,y,z);

quiver3(x,y,z,u,v,w);

hold on;

surf(x,y,z)

hold off

Page 27: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

sphere

[X, Y, Z] = sphere() • 원 surface의 패치를 의미하는 (N+1) x (N+1) 행렬

• 기본값으로 N = 20 설정

[X, Y, Z] = sphere( N ) • 설정한 N 값 만큼 (N+1) x (N+1) 행렬

27

>> [X, Y, Z] = sphere();

>> surf(X, Y, Z)

패치

Page 28: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

ellipsoid

[X, Y, Z] = ellipsoid( XC, YC, ZC, XR, YR, ZR, N) • 타원의 중심이 (XC, YC, ZC) 이며 각 축별 반지름이 각각 XR, YR, ZR

• 타원의 surface의 패치를 의미하는 (N+1) x (N+1) 행렬을 리턴

28

>> [X, Y, Z] = ellipsoid(0, 0, 0, 8, 4, 2);

>> surf( X, Y, Z )

>> axis image

>> figure;

>> mesh( X, Y, Z )

Page 29: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

cylinder

[X, Y, Z] = cylinder( R, N ) • 실린더의 높이 (z축)을 균등하게 분할하고, 벡터 R의 각 값을 해당 분할

지점의 반지름으로 하는 실린더를 그림

29

>> t = 0:pi/2:2*pi;

>> [X,Y,Z] = cylinder(1+cos(t).*sin(2*t));

>> surf(X,Y,Z)

1+cos(t).*sin(t) 그래프가 z축의 모양

Page 30: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

surfnorm

[Nx, Ny, Nz] = surfnorm( X, Y, Z ) • Normal vector [Nx, Ny, Nz]를 반환

30

>> t = 0:pi/10:2*pi;

>> [X,Y,Z] = cylinder(1+cos(t).*sin(2*t));

>> surfnorm(X,Y,Z)

Page 31: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

colormap

함수 그래프에 색을 부여할 때 사용되는 색들의 스펙트럼

내장 컬러맵 • hsv, hot, gray, bone, copper, pink, white, flag, lines, colorcube, jet,

prism, cool, autumn, spring, winter, summer

31

hsv spring cool white

>> surf(peaks(30))

>> colormap('hsv')

Page 32: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

comet: trajectory plot

comet(x, y) • 2차원 그래프에 대해 trajectory plot

comet3(x, y, z) • 3차원 그래프에 대해 trajectory plot

32

>> t = -pi:pi/2000:pi;

>> comet(t,tan(sin(t))-sin(tan(t)))

>> t = -pi:pi/500:pi;

>> comet3(sin(5*t),cos(3*t),t)

Page 33: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Volume 시각화

33

Page 34: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Volume 시각화: slice

34

x = linspace(-3, 3, 15);

y = 1:20;

z = -5:5;

[X, Y, Z] = meshgrid(x, y, z);

V = sqrt( X.^2 + Y.^2 + Z.^2 );

slice( X, Y, Z, V, 0, 5, -3);

xlabel('x-axis');

ylabel('y-axis');

zlabel('z-axis');

Page 35: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Volume 시각화: slice

• 벡터 값을 설정하면 여러 slice의 값을 동시에 보여줌

35

x = linspace(-3, 3, 15);

y = 1:20;

z = -5:5;

[X, Y, Z] = meshgrid(x, y, z);

V = sqrt( X.^2 + Y.^2 + Z.^2 );

slice( X, Y, Z, V, [0 3], [5 17], [-3 1]);

xlabel('x-axis');

ylabel('y-axis');

zlabel('z-axis');

Page 36: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Volume 시각화: slice

각 슬라이스에서 contour 그리기

36

x = linspace(-3, 3, 15);

y = 1:20;

z = -5:5;

[X, Y, Z] = meshgrid(x, y, z);

V = sqrt( X.^2 + Y.^2 + Z.^2 );

slice( X, Y, Z, V, [1 3], 5, 2);

h = contourslice( X, Y, Z, V, 3, 5, 2);

set(h, 'edgecolor', 'k', 'linewidth', 1.5);

xlabel('x-axis');

ylabel('y-axis');

zlabel('z-axis');

Page 37: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Volume 시각화: isosurface

isosurface( X, Y, Z, V, isovalue)

• isovalue에 해당하는 surface를 그림

37

x = linspace(-3, 3, 15);

y = 1:20;

z = -5:5;

[X, Y, Z] = meshgrid(x, y, z);

V = sqrt( X.^2 + Y.^2 + Z.^2 );

isosurface(X, Y, Z, V, 1.5)

isosurface(X, Y, Z, V, 2.5)

isosurface(X, Y, Z, V, 4)

grid on

Page 38: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Text Object

h = text(x, y, ‘string’) • 2차원 그래프에서 주어진 좌표 (x, y)에 문자열을 출력

h = text(x, y, z, ‘string’) • 3차원 그래프에서 주어진 좌표 (x, y, z)에 문자열 출력

h = text(x, y, z, ‘propertyname’, ‘propertyvalue’) • 주어진 좌표 (x, y, z)에 특성을 설정

• 2차원의 경우 x, y만 기술함

38

t = 0:900;

plot(t, .25 * exp(-0.005 * t));

text(300, 0.25*exp(-0.005*300), 't=300')

Page 39: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Font 종류 변경

39

text(300, 0.25*exp(-0.005*300), ‘\bf\it\fontname(times}t=300')

font 종류 속성

\bf bold

\it italic

\sl oblique

\rm normal

\fontname{fontname} font

Page 40: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

특수 문자

위첨자 : ^

아래첨자: _

font 크기: \fontsize{}

그리스 문자: \alpha, \beta, \gamma, \delta, \epsilon, …

40

x = 0:0.1:2;

y = sin(x);

plot(x, y, 'o', x, cos(x), ':');

title('Comparison between sin(\omega_0

{\it t}) wave and cos(\omega_0 {\it t})');

xlabel('time in second [{\bf time}]');

ylabel('amplitude [{\bf Volt}]');

Page 41: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Patch

꼭지점들로 이루어지는 닫힌 공간 (또는 면)

• 조각의 모서리: 꼭지점들 사이의 선

• 조각의 면: 꼭지점들을 연결한 선들로 쌓여진 영역

언제 사용하나?

• 함수로 그릴 수 없는 복잡한 도형 (또는 입체 오브젝트)를 그릴 때

41 Adrien Maglo, et al., Progressive compression of manifold polygon meshes, SMI 2012

Page 42: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Patch

2차원 Patch

42

x = [0 1 1 0];

y = [0 0 1 1];

patch(x, y, 'r')

axis([-1.5 2 -1.5 2]);

(0,0) (1,0)

(1,1) (0,1)

Page 43: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Patch

시작 꼭지점과 마지막 꼭지점이 동일하지 않을 때

• 두 꼭지점을 연결한 닫힌 영역을 생성

• 꼭지점들 간의 연결 순서에 따라 경계선들이 교차할 수 있음

43

x = [0 1 0 2];

y = [0 0 1 0.5];

patch(x, y, 'b');

Page 44: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Patch

경계선들이 교차하는 patch

44

x = [0 0.5 0.5 0.4 0.5 0.6 0.5 0.5 1 0.5];

y = [0 0 0.1 0.2 0.3 0.2 0.1 0 0 1];

patch(x, y, 'r');

Page 45: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Patch

여러 Patch가 겹쳐지는 경우

• 나중에 그려진 patch가 먼저 그려진 patch를 덮음

45

x1 = [0 1 1 0];

y1 = [0 0 1 1];

x2 = x1 + 0.5;

y2 = y1 + 0.5;

patch(x1, y1, 'r');

patch(x2, y2, 'y');

Page 46: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

3차원 Patch

각 꼭지점에 해당하는 x, y, z 값을 함께 설정

46

xt = [ 0 1 0.5 ];

yt = [ 0 0 1 ];

zt = [ 0 0 1 ];

patch(xt, yt, zt, 'r')

view(3)

box

xlabel x, ylabel y, zlabel z

Page 47: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

3차원 Patch

평면에 위치하지 않는 4개의 점으로 구성되는 Patch

47

x = [0 1 1 0];

y = [0 0 1 1];

z = [0 0 0 1];

subplot(1,2,1);

patch(x,y,z,'b');

view(-40,10); box;

xlabel x, ylabel y, zlabel z;

subplot(1,2,2);

patch(x,y,z,'r');

view(33,30); box;

xlabel x; ylabel y; zlabel z;

Page 48: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

3차원 Patch

복잡한 3차원 객체는 교차하지 않는 3차원 조각들로부터 구성

• 삼각뿔 모양의 객체

• 변수 x, y, z의 각 행이 하나의 삼각형 조각을 구성

48

x = [0 0 0.5 0; 0.5 0.5 1 1; 1 0.5 0.5 0.5];

y = [0 0 1 0; 1 1 0 0; 0 0.5 0.5 0.5];

z = [0 0 0 0; 0 0 0 0; 0 1 1 1];

patch(x,y,z,'r');

xlabel x, ylabel y, zlabel z;

view(3); box;

x =

0 0 0.5000 0

0.5000 0.5000 1.0000 1.0000

1.0000 0.5000 0.5000 0.5000

y =

0 0 1.0000 0

1.0000 1.0000 0 0

0 0.5000 0.5000 0.5000

z =

0 0 0 0

0 0 0 0

0 1 1 1

Page 49: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

다면체 조각 구성

꼭지점과 모서리들의 행렬로 정의

• 각 행이 꼭지점, 꼭지점으로 이루어지는 모서리

49

vm = [0 0 0; % 꼭지점 1

0.5 1 0; % 꼭지점 2

1 0 0; % 꼭지점 3

0.5 0.5 1]; % 꼭지점 4

fm = [1 2 3; % 1,2,3 꼭지점으로 이루어지는 모서리

1 2 4;

2 3 4;

1 3 4];

patch('Vertices', vm, 'Faces', fm, 'FaceColor', 'g');

view(162, 44);

box;

xlabel x, ylabel y, zlabel z;

Page 50: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Patch Face Color

50

vm = [0 0; 0 1; 1 1; 1 0];

fm = [1 2 3 4];

h = patch('Vertices', vm, 'Faces', fm, 'FaceColor', 'g');

T = [1 2 3 4];

set(h, 'FaceVertexCData', T', 'FaceColor', 'interp', 'EdgeColor', 'none');

Page 51: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

예제: 가열되는 파이프 면의 온도 분포

51

N = 20;

dt = 2*pi/N;

t = 0:dt:(N-1)*dt;

x = [cos(t) cos(t)];

y = [sin(t) sin(t)];

z = [zeros(size(t)) ones(size(t))];

v = [x' y' z'];

f = [1:N; N+1:2*N; [N+2:2*N N+1]; [2:N 1]]';

h = patch('Vertices', v, 'Faces', f, 'FaceColor', 'g');

xlabel x; ylabel y; zlabel z;

Page 52: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

예제: 가열되는 파이프 면의 온도 분포

52

dist = sqrt((x+0.5).^2 + y.^2 + (z-0.25).^2);

T = 1./dist;

colormap(hot);

set(h, 'FaceVertexCData', T', …

'FaceColor', 'interp', 'EdgeColor', 'none');

Page 53: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

예제: 스트레스를 받는 케이블

한번 뒤틀린 나사 모양의 케이블이 받는 스트레스를 색상으로 표시

53

t = linspace(0, 2*pi, 20);

x = cos(t);

y = t;

z = sin(t);

V = [x' y' z']; % 꼭지점 행렬

f = 1:20; % 면 행렬

fvc = summer(20);

clf

patch('Vertices', V, 'Faces', f, 'FaceVertexCdata', fvc, ...

'FaceColor', 'interp', 'EdgeColor', 'r', 'Marker', 'o', ...

'MarkerFaceColor', 'flat');

view(44, 18); axis equal; box;

Page 54: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Quiz

54

Page 55: MATLAB Graphs II - KAIST IT Academy Web Service v 2.0 · PDF file · 2014-01-27contour [C, h] = contour( Z ) • Z축에 관한 행렬을 력 받아 등고선을 그리고, contour

Quiz Sol.

길이가 2m인 정사각형 모양의 철판이 있을 때, 열원이 아래와

같이 주어지는 경우 온도 분포를 시각화 해보자.

• 철판의 각 꼭지점은 (0, 0, 0), (2, 0, 0), (0, 0, 2), (2, 0, 2)

• 열원의 위치 (x,y,z) = (1, -0.5, 1)

55

x = [0:2 0:2 0:2];

y = zeros(1, 9);

z = [0 0 0 1 1 1 2 2 2];

fm = [1 2 5 4; 2 3 6 5; 4 5 8 7; 5 6 9 8];

vm = [x' y' z'];

h = patch('Vertices', vm, 'Faces', fm, 'FaceColor', 'g');

xlabel x; ylabel y; zlabel z;

dist = sqrt((x-1).^2 + (y+0.5).^2 + (z-1).^2);

T = 1./dist;

colormap(hot);

set(h, 'FaceVertexCData', T', 'FaceColor', 'interp', 'EdgeColor', 'none');

view(30, 30)

grid on;