MATLAB三维图像属性修改教程
MATLAB三维图像属性修改教程
更改三维图像属性
以下示例演示如何在 MATLAB 中获取曲面图的属性,以及如何更改属性值以自定义绘图。
曲面对象
在 MATLAB 中有多种方式可以创建曲面对象。一种方式是使用 surf
。
[X,Y,Z] = peaks(50);
figure
surf(X,Y,Z)
与所有图形对象一样,曲面有您可以查看和修改的属性。这些属性具有默认值。下面所示的曲面对象显示了最常用的曲面属性,如 EdgeColor
、LineStyle
、FaceColor
和 FaceLighting
。
s = surf(X,Y,Z)
s =
Surface with properties:
EdgeColor: [0 0 0]
LineStyle: '-'
FaceColor: 'flat'
FaceLighting: 'flat'
FaceAlpha: 1
XData: [50x50 double]
YData: [50x50 double]
ZData: [50x50 double]
CData: [50x50 double]
Use GET to show all properties
获取个别曲面属性
若要访问个别属性,请使用圆点表示法语法 object.PropertyName
。例如,返回曲面的 FaceColor
属性。
s.FaceColor
ans =
'flat'
更改常用的曲面属性
有些函数可用于更改曲面属性。例如,使用 shading
函数控制曲面着色。
shading interp % interpolate the colormap across the surface face
使用 lighting
函数调整曲面的光照特性。要使 lighting
产生效果,您必须创建一个光源对象来照亮曲面。
light % create a light
lighting gouraud % preferred method for lighting curved surfaces
若要更改曲面的反射属性,请使用 material
函数。
material dull % set material to be dull, no specular highlights
若要为当前坐标区中的所有对象设置透明度,请使用 alpha
函数。此函数将透明度设置为介于 1 和 0 之间的任意值,其中 1 表示完全不透明,0 表示完全透明。
alpha(0.8) % set transparency to 0.8
更改其他曲面属性
若要自定义曲面的外观,请使用圆点表示法更改属性值。CData
定义曲面顶点的颜色。FaceColor
属性指示如何从顶点颜色确定曲面颜色。
s.CData = hypot(X,Y); % set color data
s.FaceColor = 'interp'; % interpolate to get face colors
AlphaData
定义曲面每个顶点的透明度。FaceAlpha
属性指示如何从顶点透明度确定曲面透明度。
s.AlphaData = gradient(Z); % set vertex transparencies
s.FaceAlpha = 'interp'; % interpolate to get face transparencies
获取所有曲面属性
MATLAB 中的图形对象有许多属性。若要查看曲面的所有属性,请使用 get
命令。
get(s)
AlignVertexCenters: off
AlphaData: [50x50 double]
AlphaDataMapping: 'scaled'
AmbientStrength: 0.3000
Annotation: [1x1 matlab.graphics.eventdata.Annotation]
BackFaceLighting: 'reverselit'
BeingDeleted: off
BusyAction: 'queue'
ButtonDownFcn: ''
CData: [50x50 double]
CDataMapping: 'scaled'
CDataMode: 'manual'
CDataSource: ''
Children: [0x0 GraphicsPlaceholder]
Clipping: on
ContextMenu: [0x0 GraphicsPlaceholder]
CreateFcn: ''
DataTipTemplate: [1x1 matlab.graphics.datatip.DataTipTemplate]
DeleteFcn: ''
DiffuseStrength: 0.8000
DisplayName: ''
EdgeAlpha: 1
EdgeColor: 'none'
EdgeLighting: 'none'
FaceAlpha: 'interp'
FaceColor: 'interp'
FaceLighting: 'gouraud'
FaceNormals: [49x49x3 double]
FaceNormalsMode: 'auto'
HandleVisibility: 'on'
HitTest: on
Interruptible: on
LineStyle: '-'
LineWidth: 0.5000
Marker: 'none'
MarkerEdgeColor: 'auto'
MarkerFaceColor: 'none'
MarkerSize: 6
MeshStyle: 'both'
Parent: [1x1 Axes]
PickableParts: 'visible'
Selected: off
SelectionHighlight: on
SpecularColorReflectance: 1
SpecularExponent: 10
SpecularStrength: 0
Tag: ''
Type: 'surface'
UserData: []
VertexNormals: [50x50x3 double]
VertexNormalsMode: 'auto'
Visible: on
XData: [50x50 double]
XDataMode: 'manual'
XDataSource: ''
YData: [50x50 double]
YDataMode: 'manual'
YDataSource: ''
ZData: [50x50 double]
ZDataSource: ''
创建MATLAB图标
以下示例演示如何创建和显示 MATLAB 徽标。
使用 membrane
命令生成徽标的曲面数据。
L = 160*membrane(1,100);
创建一个图窗和一套坐标区以显示徽标。然后,使用通过 membrane
命令得到的点创建徽标的曲面。关闭曲面中的线条。
f = figure;
ax = axes;
s = surface(L);
s.EdgeColor = 'none';
view(3)
调整坐标区范围,使坐标区紧密围绕在徽标周围。
ax.XLim = [1 201];

ax.YLim = [1 201];
ax.ZLim = [-53.4 160];
使用坐标区的相机属性调整徽标视图。相机属性控制三维场景的视图,就像带有缩放镜头的相机一样。
ax.CameraPosition = [-145.5 -229.7 283.6];
ax.CameraTarget = [77.4 60.2 63.9];
ax.CameraUpVector = [0 0 1];
ax.CameraViewAngle = 36.7;
更改坐标区的位置和 x、y 和 z 纵横比以填充图窗窗口中的额外空间。
ax.Position = [0 0 1 1];
ax.DataAspectRatio = [1 1 .9];
创建光源以照亮徽标。光源本身不可见,但可设置其属性以更改坐标区中任何填充或曲面对象的外观。
l1 = light;
l1.Position = [160 400 80];
l1.Style = 'local';
l1.Color = [0 0.8 0.8];
l2 = light;
l2.Position = [.5 -1 .4];
l2.Color = [0.8 0.8 0];
更改徽标的颜色。
s.FaceColor = [0.9 0.2 0.2];
使用曲面的光照和镜面(反射)属性来控制光照效果。
s.FaceLighting = 'gouraud';
s.AmbientStrength = 0.3;
s.DiffuseStrength = 0.6;
s.BackFaceLighting = 'lit';
s.SpecularStrength = 1;
s.SpecularColorReflectance = 1;
s.SpecularExponent = 7;
关闭轴以查看最终结果。
axis off
f.Color = 'black';