surfnorm
곡면 법선
설명
surfnorm(
는 법선이 있는 곡면을 만들고, Z
)Z
에 있는 요소의 열 인덱스와 행 인덱스를 각각 x 좌표와 y 좌표로 사용합니다.
예제
곡면 법선이 있는 곡면 플롯 만들기
원뿔을 만듭니다. 그런 다음, 데이터를 곡면으로 플로팅하고 곡면 법선을 표시합니다. 곡면은 높이와 색에 모두 Z
를 사용합니다.
[X,Y,Z] = cylinder(1:10); surfnorm(X,Y,Z)
곡면 플롯 모양 수정하기
값이 'none'
인 EdgeColor
이름-값 쌍을 지정하여 가장자리가 없는 곡면을 만듭니다.
[X,Y,Z] = cylinder(1:10); surfnorm(X,Y,Z,'EdgeColor','none')
곡면 법선을 사용하여 곡면 조명하기
굽은 곡면의 곡면 법선을 사용하여 평면을 조명합니다.
먼저 평면을 표시합니다.
surf(ones(49),'EdgeColor','none');
굽은 곡면을 표시하여 광원으로 사용합니다.
surf(peaks);
이제 평면을 다시 그리되, 이번에는 굽은 곡면의 조명을 적용해 그립니다. 이를 수행하려면 먼저 굽은 곡면의 곡면 법선을 계산하십시오.
[nx, ny, nz] = surfnorm(peaks);
x, y, z 곡면 법선 성분을 단일 49×49×3 배열로 결합합니다.
b = reshape([nx ny nz], 49,49,3);
평면을 다시 만들되 이번에는 이 배열을 VertexNormals
속성에 대한 값으로 제공합니다. MATLAB®은 VertexNormals
속성을 사용하여 곡면 조명을 계산합니다. 조명 알고리즘을 gouraud
로 설정하고 camlight
를 사용하여 조명을 추가합니다.
surf(ones(49),'VertexNormals',b,'EdgeColor','none'); lighting gouraud camlight
입력 인수
X
— x 좌표
행렬
x 좌표로, Y
및 Z
와 크기가 같은 행렬로 지정됩니다.
meshgrid
함수를 사용하여 X
와 Y
행렬을 만들 수 있습니다.
Surface
객체의 XData
속성에는 x 좌표가 저장됩니다.
예: 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
— y 좌표
행렬
y 좌표로, X
및 Z
와 크기가 같은 행렬로 지정됩니다.
meshgrid
함수를 사용하여 X
와 Y
행렬을 만들 수 있습니다.
surface 객체의 YData
속성은 y 좌표를 저장합니다.
예: 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 좌표
행렬
z 좌표로, 행렬로 지정됩니다. Z
에는 적어도 3개 이상의 행과 3개 이상의 열이 있어야 합니다. Z
는 곡면 색도 설정합니다.
surface 객체의 ZData
속성은 z 좌표를 저장합니다.
예: Z = [1 2 3; 4 5 6; 7 8 9]
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ax
— 플로팅할 좌표축
axes 객체
플로팅할 좌표축으로, axes
객체로 지정됩니다. 좌표축을 지정하지 않을 경우 surfnorm
은 현재 좌표축에 플로팅됩니다.
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: surfnorm(X,Y,Z,'FaceAlpha',0.5,'EdgeColor','none')
은 가장자리를 그리지 않는 반투명 곡면을 만듭니다.
참고
여기에 나와 있는 속성은 일부에 불과합니다. 전체 목록을 보려면 Surface 속성를 참조하십시오.
EdgeColor
— 모서리 선 색
[0 0 0]
(디폴트 값) | 'none'
| 'flat'
| 'interp'
| RGB 3색 | 16진수 색 코드 | 'r'
| 'g'
| 'b'
| ...
모서리 선 색으로, 여기에 나열된 값 중 하나로 지정됩니다. 디폴트 색 [0 0 0]
은 검은색 모서리에 해당합니다.
값 | 설명 |
---|---|
'none' | 모서리를 그리지 않습니다. |
'flat' |
|
'interp' |
|
RGB 3색, 16진수 색 코드 또는 색 이름 | 모든 모서리에 지정된 색을 사용합니다. 이 옵션은
|
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" | |
"green" | "g" | [0 1 0] | "#00FF00" | |
"blue" | "b" | [0 0 1] | "#0000FF" | |
"cyan" | "c" | [0 1 1] | "#00FFFF" | |
"magenta" | "m" | [1 0 1] | "#FF00FF" | |
"yellow" | "y" | [1 1 0] | "#FFFF00" | |
"black" | "k" | [0 0 0] | "#000000" | |
"white" | "w" | [1 1 1] | "#FFFFFF" |
다음은 MATLAB®이 여러 유형의 플롯에서 사용하는 디폴트 색의 RGB 3색과 16진수 색 코드입니다.
RGB 3색 | 16진수 색 코드 | 모양 |
---|---|---|
[0 0.4470 0.7410] | "#0072BD" | |
[0.8500 0.3250 0.0980] | "#D95319" | |
[0.9290 0.6940 0.1250] | "#EDB120" | |
[0.4940 0.1840 0.5560] | "#7E2F8E" | |
[0.4660 0.6740 0.1880] | "#77AC30" | |
[0.3010 0.7450 0.9330] | "#4DBEEE" | |
[0.6350 0.0780 0.1840] | "#A2142F" |
LineStyle
— 선 스타일
"-"
(디폴트 값) | "--"
| ":"
| "-."
| "none"
선 스타일로, 다음 표에 나열된 옵션 중 하나로 지정됩니다.
선 스타일 | 설명 | 결과 선 |
---|---|---|
"-" | 실선 |
|
"--" | 파선 |
|
":" | 점선 |
|
"-." | 일점 쇄선 |
|
"none" | 선 없음 | 선 없음 |
FaceColor
— 면 색
'flat'
(디폴트 값) | 'interp'
| 'none'
| 'texturemap'
| RGB 3색 | 16진수 색 코드 | 'r'
| 'g'
| 'b'
| ...
면 색으로, 이 표에 있는 값 중 하나로 지정됩니다.
값 | 설명 |
---|---|
'flat' |
|
'interp' |
|
RGB 3색, 16진수 색 코드 또는 색 이름 | 모든 면에 지정된 색을 사용합니다. 이 옵션은
|
'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" | |
"green" | "g" | [0 1 0] | "#00FF00" | |
"blue" | "b" | [0 0 1] | "#0000FF" | |
"cyan" | "c" | [0 1 1] | "#00FFFF" | |
"magenta" | "m" | [1 0 1] | "#FF00FF" | |
"yellow" | "y" | [1 1 0] | "#FFFF00" | |
"black" | "k" | [0 0 0] | "#000000" | |
"white" | "w" | [1 1 1] | "#FFFFFF" |
다음은 MATLAB이 여러 유형의 플롯에서 사용하는 디폴트 색의 RGB 3색과 16진수 색 코드입니다.
RGB 3색 | 16진수 색 코드 | 모양 |
---|---|---|
[0 0.4470 0.7410] | "#0072BD" | |
[0.8500 0.3250 0.0980] | "#D95319" | |
[0.9290 0.6940 0.1250] | "#EDB120" | |
[0.4940 0.1840 0.5560] | "#7E2F8E" | |
[0.4660 0.6740 0.1880] | "#77AC30" | |
[0.3010 0.7450 0.9330] | "#4DBEEE" | |
[0.6350 0.0780 0.1840] | "#A2142F" |
FaceAlpha
— 면 투명도
1 (디폴트 값) | [0,1]
범위의 스칼라 | 'flat'
| 'interp'
| 'texturemap'
면 투명도로, 다음 값 중 하나로 지정됩니다.
범위
[0,1]
사이에 있는 스칼라 값 — 모든 면에 균일한 투명도를 사용합니다. 값이1
이면 완전히 불투명하고0
이면 완전히 투명합니다.0
과1
사이의 값을 지정하면 반투명해집니다. 이 옵션은AlphaData
속성의 투명도 값을 사용하지 않습니다.'flat'
—AlphaData
속성의 값에 따라 각 면에 서로 다른 투명도를 사용합니다. 첫 번째 꼭짓점의 투명도 값에 따라 전체 면의 투명도가 결정됩니다. 먼저AlphaData
속성을ZData
속성과 크기가 같은 행렬로 지정해야 합니다. 또한FaceColor
속성이'flat'
으로 설정되어 있어야 합니다.'interp'
—AlphaData
속성의 값에 따라 각 면에 보간된 투명도를 사용합니다. 꼭짓점의 값을 보간하기 때문에 각 면에서 투명도가 다릅니다. 먼저AlphaData
속성을ZData
속성과 크기가 같은 행렬로 지정해야 합니다. 또한FaceColor
속성이'interp'
로 설정되어 있어야 합니다.'texturemap'
— 곡면에 맞게AlphaData
의 데이터를 변환합니다.
FaceLighting
— 면에 대한 light 객체 효과
'flat'
(디폴트 값) | 'gouraud'
| 'none'
면에 대한 light 객체 효과로, 다음 값 중 하나로 지정됩니다.
'flat'
— 각 면에 걸쳐 균일하게 조명을 적용합니다. 이 값을 사용하면 패싯 처리된 객체를 볼 수 있습니다.'gouraud'
— 각 면 간에 조명이 달라집니다. 꼭짓점에서 조명을 계산한 후 각 면 간에 조명을 선형으로 보간합니다. 이 값을 사용하면 곡선 처리된 곡면을 볼 수 있습니다.'none'
— light 객체의 조명을 면에 적용하지 않습니다.
light 객체를 좌표축에 추가하려면 light
함수를 사용하십시오.
참고
'phong'
값은 제거되었습니다. 'gouraud'
를 대신 사용하십시오.
출력 인수
팁
법선의 방향을 반전시키려면 다음과 같이 전치된 인수로
surfnorm
을 호출하십시오.surfnorm(X',Y',Z')
곡면에 법선의 방향을 표시하려면
surfnorm
함수를 사용하여 곡면 법선을 계산한 후quiver3
함수를 사용하여 이를 표시하십시오.[Nx,Ny,Nz] = surfnorm(X,Y,Z); quiver3(X,Y,Z,Nx,Ny,Nz)
곡면 법선은 꼭짓점에서의 조건을 나타내며 정규화되지 않습니다. 보는 사람의 시야에서 멀리 떨어진 곡면 요소에 대한 법선은 표시되지 않습니다.
알고리즘
surfnorm
은 x, y, z 방향으로 쌍삼차 보간을 사용하여 데이터의 곡면 법선을 계산합니다. 경계에서 보간을 허용하기 위해, 이 함수는 2차 외삽을 사용하여 데이터를 확장합니다. 데이터의 쌍삼차 피팅(bicubic fit)을 수행하면 대각 벡터가 계산되고 그 외적이 각 꼭짓점에서 법선을 형성합니다.
버전 내역
R2006a 이전에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)