주요 콘텐츠

surfl

컬러맵 기반의 조명 효과가 있는 곡면 플롯

  • Surface plot with colormap-based lighting

설명

surfl(X,Y,Z)는 광원의 하이라이트로 3차원 곡면 플롯을 만듭니다. 이 함수는 행렬 Z의 값을 XY로 정의된 x-y 평면의 그리드 위 높이로 플로팅합니다. 이 함수는 광원에 대한 디폴트 방향과 셰이딩 모델에 대한 디폴트 조명 계수를 사용합니다. 이렇게 하면 곡면에 대한 색 데이터가 곡면의 반사율이 되도록 설정됩니다.

곡면 법선 벡터를 계산하는 방법 때문에 surfl에는 3×3 이상의 행렬이 필요합니다.

예제

surfl(Z)는 곡면을 만들고, Z에 있는 요소의 열 인덱스와 행 인덱스를 x 좌표와 y 좌표로 사용합니다.

surfl(___,'light')는 MATLAB® light 객체의 하이라이트로 곡면을 만듭니다. 그러면 디폴트 컬러맵을 기반으로 한 조명 메서드를 통해 다양한 결과가 생성됩니다. 'light' 객체를 마지막 입력 인수로 지정합니다.

예제

surfl(___,s)는 추가적으로 광원의 방향을 지정합니다.

예제

surfl(X,Y,Z,s,k)는 추가적으로 반사율 상수를 지정합니다.

예제

surfl(___,Name=Value)는 하나 이상의 이름-값 인수를 사용하여 곡면 플롯의 속성을 설정합니다. 예를 들어, 곡면의 색과 투명도를 설정할 수 있습니다. 속성 목록은 Surface 속성 항목을 참조하십시오. (R2024b 이후)

surfl(ax,___)는 현재 좌표축 대신 ax로 지정된 좌표축에 플로팅됩니다. 좌표축을 첫 번째 입력 인수로 지정합니다.

s = surfl(___)은 chart surface 객체를 반환합니다. 'light' 옵션을 사용하여 광원이 light 객체로 지정되는 경우 s는 chart surface 객체와 light 객체를 포함하는 그래픽스 배열로 반환됩니다. 만든 후 surface 객체 및 light 객체를 수정하려면 s를 사용하십시오. 속성 목록은 Surface 속성Light 속성를 참조하십시오.

예제

예제

모두 축소

동일한 크기의 행렬을 3개 만듭니다. 그런 다음, 컬러맵 기반 조명을 사용하여 이들 행렬을 곡면으로 플로팅합니다. 곡면은 높이에는 Z를 사용하고 색에는 Z와 광원을 모두 사용합니다.

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
surfl(X,Y,Z)

Figure contains an axes object. The axes object contains an object of type surface.

동일한 크기의 행렬을 3개 만듭니다. 그런 다음, MATLAB® light 객체의 하이라이트로 이들 행렬을 곡면으로 플로팅합니다. 곡면은 높이에는 Z를 사용하고 색에는 Z와 light 객체를 모두 사용합니다. 이 함수는 surface 객체와 조명 객체를 포함하는 배열을 반환합니다. 이 배열을 변수 sl에 할당하십시오.

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
sl = surfl(X,Y,Z,'light');

Figure contains an axes object. The axes object contains an object of type surface.

surface 객체와 light 객체가 생성되면 sl의 요소를 참조하여 해당 속성에 액세스하고 수정할 수 있습니다. 곡면 플롯은 sl(1)로, light 객체는 sl(2)로 액세스할 수 있습니다. 예를 들어, light 객체의 Color 속성을 설정하여 조명 색상을 변경할 수 있습니다.

sl(2).Color = 'r';

Figure contains an axes object. The axes object contains an object of type surface.

곡면으로 플로팅할 같은 크기의 행렬을 3개 만듭니다. 방위각 45도와 고도 20도를 갖도록 광원의 방향을 지정합니다. 주변광의 비중을 늘리고 난반사와 정반사의 비중을 줄여 곡면의 반사율을 늘립니다. surface 객체를 변수 sl에 할당합니다.

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
s = [-45 20];
k = [.65 .4 .3 10];

광원 벡터와 반사율 벡터를 사용하여 데이터를 플로팅합니다.

sl = surfl(X,Y,Z,s,k);

Figure contains an axes object. The axes object contains an object of type surface.

surface 객체가 sl에 생성되면 이를 통해 곡면의 속성에 액세스하고 수정할 수 있습니다. 예를 들어 EdgeColor 속성을 설정하여 가장자리를 숨겨보겠습니다.

sl.EdgeColor = 'none';

Figure contains an axes object. The axes object contains an object of type surface.

입력 인수

모두 축소

x 좌표로, Z와 크기가 동일한 행렬 또는 길이가 n인 벡터로 지정됩니다(여기서 [m,n] = size(Z)임). XY에 대한 값을 지정하지 않으면 surfl은 벡터 (1:n)(1:m)을 사용합니다.

meshgrid 함수를 사용하여 XY 행렬을 만들 수 있습니다.

Surface 객체의 XData 속성에는 x 좌표가 저장됩니다.

예: X = 1:10

예: X = [1 2 3; 1 2 3; 1 2 3]

예: [X,Y] = meshgrid(-5:0.5:5)

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

y 좌표로, Z와 크기가 동일한 행렬 또는 길이가 m인 벡터로 지정됩니다(여기서 [m,n] = size(Z)임). XY에 대한 값을 지정하지 않으면 surfl은 벡터 (1:n)(1:m)을 사용합니다.

meshgrid 함수를 사용하여 XY 행렬을 만들 수 있습니다.

surface 객체의 YData 속성은 y 좌표를 저장합니다.

예: Y = 1:10

예: Y = [1 1 1; 2 2 2; 3 3 3]

예: [X,Y] = meshgrid(-5:0.5:5)

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

z 좌표로, 행렬로 지정됩니다. Z에는 적어도 두 개의 행과 두 개의 열이 있어야 합니다.

surface 객체의 ZData 속성은 z 좌표를 저장합니다.

예: Z = [1 2 3; 4 5 6]

예: Z = sin(x) + cos(y)

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

곡면에서 광원으로의 방향으로, 요소를 2개 또는 3개 가진 벡터로 지정됩니다. 이 벡터는 [sx sy sz] 또는 [azimuth elevation]의 형식을 가집니다. 디폴트 방향은 현재 보기 방향에서 시계 반대 방향으로 45°입니다.

반사율 상수로, 요소를 4개 가진 벡터로 지정됩니다. 이 벡터는 [ka kd ks shine] 형식을 사용하여 주변광, 난반사, 정반사, 정반사광 계수의 상대적 비중을 정의합니다. 기본적으로 k[.55 .6 .4 10]입니다.

플로팅할 좌표축으로, axes 객체로 지정됩니다. 좌표축을 지정하지 않을 경우 surfl은 현재 좌표축에 플로팅됩니다.

이름-값 인수

모두 축소

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: surfl(peaks,FaceAlpha=0.5)는 투명도가 50%인 곡면을 플로팅합니다.

참고

여기에 나와 있는 속성은 일부에 불과합니다. 전체 목록을 보려면 Surface 속성 항목을 참조하십시오.

면 색으로, 이 표에 있는 값 중 하나로 지정됩니다.

설명
'flat'

CData 속성의 값에 따라 각 면에 각각 다른 색을 사용합니다. 먼저 CData 속성을 ZData와 크기가 같은 행렬로 지정해야 합니다. 각 면 첫 번째 꼭짓점의 색 값(양의 xy 방향)은 전체 면의 색을 결정합니다. FaceAlpha 속성이 'interp'로 설정된 경우 이 값을 사용할 수 없습니다.

Sample of a surface with each face a different color based on sample values in the CData property

'interp'

CData 속성의 값에 따라 각 면에 보간된 색을 사용합니다. 먼저 CData 속성을 ZData와 크기가 같은 행렬로 지정해야 합니다. 꼭짓점에서 색 값을 보간하므로 면마다 색이 달라집니다. FaceAlpha 속성이 'flat'으로 설정된 경우 이 값을 사용할 수 없습니다.

Sample of a surface with each face showing different interpolated coloring based on sample values in the CData property

RGB 3색, 16진수 색 코드 또는 색 이름

모든 면에 지정된 색을 사용합니다. 이 옵션은 CData 속성의 색 값을 사용하지 않습니다.

Sample of a surface with all faces shown in red

'texturemap'곡면에 맞게 CData의 색 데이터를 변환합니다.
'none'면을 그리지 않습니다.

RGB 3색과 16진수 색 코드는 사용자 지정 색을 지정할 때 유용합니다.

  • RGB 3색은 요소를 3개 가진 행 벡터로, 각 요소는 색을 구성하는 빨간색, 녹색, 파란색의 농도를 지정합니다. 농도의 범위는 [0,1]이어야 합니다(예: [0.4 0.6 0.7]).

  • 16진수 색 코드는 문자형 벡터 또는 string형 스칼라로, 해시 기호(#)로 시작하고 그 뒤에 3자리 또는 6자리의 16진수 숫자(0에서 F 사이일 수 있음)가 옵니다. 이 값은 대/소문자를 구분하지 않습니다. 따라서 색 코드 "#FF8800", "#ff8800", "#F80""#f80"은 모두 동일합니다.

몇몇의 흔한 색은 이름으로 지정할 수도 있습니다. 다음 표에는 명명된 색 옵션과 그에 해당하는 RGB 3색 및 16진수 색 코드가 나와 있습니다.

색 이름짧은 이름RGB 3색16진수 색 코드모양
"red""r"[1 0 0]"#FF0000"

Sample of the color red

"green""g"[0 1 0]"#00FF00"

Sample of the color green

"blue""b"[0 0 1]"#0000FF"

Sample of the color blue

"cyan" "c"[0 1 1]"#00FFFF"

Sample of the color cyan

"magenta""m"[1 0 1]"#FF00FF"

Sample of the color magenta

"yellow""y"[1 1 0]"#FFFF00"

Sample of the color yellow

"black""k"[0 0 0]"#000000"

Sample of the color black

"white""w"[1 1 1]"#FFFFFF"

Sample of the color white

다음 표에는 라이트 테마와 다크 테마에서 플롯의 디폴트 색 팔레트가 나열되어 있습니다.

팔레트팔레트 색

"gem" — 라이트 테마 디폴트 값

R2025a 이전: 대부분의 플롯은 기본적으로 이 색을 사용합니다.

Sample of the "gem" color palette

"glow" — 다크 테마 디폴트 값

Sample of the "glow" color palette

orderedcolors 함수와 rgb2hex 함수를 사용하여 이러한 팔레트의 RGB 3색과 16진수 색 코드를 가져올 수 있습니다. 예를 들어, "gem" 팔레트의 RGB 3색을 가져와서 16진수 색 코드로 변환해 보겠습니다.

RGB = orderedcolors("gem");
H = rgb2hex(RGB);

R2023b 이전: RGB = get(groot,"FactoryAxesColorOrder")를 사용하여 RGB 3색을 가져옵니다.

R2024a 이전: H = compose("#%02X%02X%02X",round(RGB*255))를 사용하여 16진수 색 코드를 가져옵니다.

면 투명도로, 다음 값 중 하나로 지정됩니다.

  • 범위 [0,1] 사이에 있는 스칼라 값 — 모든 면에 균일한 투명도를 사용합니다. 값이 1이면 완전히 불투명하고 0이면 완전히 투명합니다. 01 사이의 값을 지정하면 반투명해집니다. 이 옵션은 AlphaData 속성의 투명도 값을 사용하지 않습니다.

  • 'flat'AlphaData 속성의 값에 따라 각 면에 서로 다른 투명도를 사용합니다. 첫 번째 꼭짓점의 투명도 값에 따라 전체 면의 투명도가 결정됩니다. 먼저 AlphaData 속성을 ZData 속성과 크기가 같은 행렬로 지정해야 합니다. 또한 FaceColor 속성이 'flat'으로 설정되어 있어야 합니다.

  • 'interp'AlphaData 속성의 값에 따라 각 면에 보간된 투명도를 사용합니다. 꼭짓점의 값을 보간하기 때문에 각 면에서 투명도가 다릅니다. 먼저 AlphaData 속성을 ZData 속성과 크기가 같은 행렬로 지정해야 합니다. 또한 FaceColor 속성이 'interp'로 설정되어 있어야 합니다.

  • 'texturemap' — 곡면에 맞게 AlphaData의 데이터를 변환합니다.

모서리 선 색으로, 여기에 나열된 값 중 하나로 지정됩니다. 디폴트 색 [0 0 0]은 검은색 모서리에 해당합니다.

설명
'none'모서리를 그리지 않습니다.
'flat'

CData 속성의 값을 기반으로 하여 각 모서리에 다른 색을 사용합니다. 먼저 CData 속성을 ZData와 크기가 같은 행렬로 지정해야 합니다. 각 면 첫 번째 꼭짓점의 색 값(양의 xy 방향)은 인접 모서리의 색을 결정합니다. EdgeAlpha 속성이 'interp'로 설정된 경우 이 값을 사용할 수 없습니다.

Sample of a surface with each edge a different color based on sample values in the CData property

'interp'

CData 속성의 값을 기반으로 하여 각 모서리에 보간된 색을 사용합니다. 먼저 CData 속성을 ZData와 크기가 같은 행렬로 지정해야 합니다. 꼭짓점에서 색 값을 선형적으로 보간하므로 모서리마다 색이 달라집니다. EdgeAlpha 속성이 'flat'으로 설정된 경우 이 값을 사용할 수 없습니다.

Sample of a surface with each edge showing different interpolated coloring based on sample values in the CData property

RGB 3색, 16진수 색 코드 또는 색 이름

모든 모서리에 지정된 색을 사용합니다. 이 옵션은 CData 속성의 색 값을 사용하지 않습니다.

Sample of a surface with all edges shown in red

RGB 3색과 16진수 색 코드는 사용자 지정 색을 지정할 때 유용합니다.

  • RGB 3색은 요소를 3개 가진 행 벡터로, 각 요소는 색을 구성하는 빨간색, 녹색, 파란색의 농도를 지정합니다. 농도의 범위는 [0,1]이어야 합니다(예: [0.4 0.6 0.7]).

  • 16진수 색 코드는 문자형 벡터 또는 string형 스칼라로, 해시 기호(#)로 시작하고 그 뒤에 3자리 또는 6자리의 16진수 숫자(0에서 F 사이일 수 있음)가 옵니다. 이 값은 대/소문자를 구분하지 않습니다. 따라서 색 코드 "#FF8800", "#ff8800", "#F80""#f80"은 모두 동일합니다.

몇몇의 흔한 색은 이름으로 지정할 수도 있습니다. 다음 표에는 명명된 색 옵션과 그에 해당하는 RGB 3색 및 16진수 색 코드가 나와 있습니다.

색 이름짧은 이름RGB 3색16진수 색 코드모양
"red""r"[1 0 0]"#FF0000"

Sample of the color red

"green""g"[0 1 0]"#00FF00"

Sample of the color green

"blue""b"[0 0 1]"#0000FF"

Sample of the color blue

"cyan" "c"[0 1 1]"#00FFFF"

Sample of the color cyan

"magenta""m"[1 0 1]"#FF00FF"

Sample of the color magenta

"yellow""y"[1 1 0]"#FFFF00"

Sample of the color yellow

"black""k"[0 0 0]"#000000"

Sample of the color black

"white""w"[1 1 1]"#FFFFFF"

Sample of the color white

다음 표에는 라이트 테마와 다크 테마에서 플롯의 디폴트 색 팔레트가 나열되어 있습니다.

팔레트팔레트 색

"gem" — 라이트 테마 디폴트 값

R2025a 이전: 대부분의 플롯은 기본적으로 이 색을 사용합니다.

Sample of the "gem" color palette

"glow" — 다크 테마 디폴트 값

Sample of the "glow" color palette

orderedcolors 함수와 rgb2hex 함수를 사용하여 이러한 팔레트의 RGB 3색과 16진수 색 코드를 가져올 수 있습니다. 예를 들어, "gem" 팔레트의 RGB 3색을 가져와서 16진수 색 코드로 변환해 보겠습니다.

RGB = orderedcolors("gem");
H = rgb2hex(RGB);

R2023b 이전: RGB = get(groot,"FactoryAxesColorOrder")를 사용하여 RGB 3색을 가져옵니다.

R2024a 이전: H = compose("#%02X%02X%02X",round(RGB*255))를 사용하여 16진수 색 코드를 가져옵니다.

모서리 투명도로, 다음 값 중 하나로 지정됩니다.

  • [0,1] 범위의 스칼라 — 모든 모서리에 균일한 투명도를 사용합니다. 값이 1이면 완전히 불투명하고 0이면 완전히 투명합니다. 01 사이의 값을 지정하면 반투명해집니다. 이 옵션은 AlphaData 속성의 투명도 값을 사용하지 않습니다.

  • 'flat'AlphaData 속성의 값에 따라 각 모서리에 서로 다른 투명도를 사용합니다. 먼저 AlphaData 속성을 ZData 속성과 크기가 같은 행렬로 지정해야 합니다. 첫 번째 꼭짓점의 투명도 값에 따라 전체 모서리의 투명도가 결정됩니다. 또한 EdgeColor 속성이 'flat'으로 설정되어 있어야 합니다.

  • 'interp'AlphaData 속성의 값에 따라 각 모서리에 보간된 투명도를 사용합니다. 먼저 AlphaData 속성을 ZData 속성과 크기가 같은 행렬로 지정해야 합니다. 꼭짓점의 값을 보간하기 때문에 각 모서리에서 투명도가 다릅니다. 또한 EdgeColor 속성이 'interp'로 설정되어 있어야 합니다.

  • X, Y, Z 행렬에서 점을 정렬하면 파라미터 곡면의 내부와 외부가 정의됩니다. 곡면의 반대쪽이 광원을 반사하도록 하려면 surfl(X',Y',Z')를 사용하십시오.

확장 기능

모두 확장

버전 내역

R2006a 이전에 개발됨

모두 확장