Contenido principal

Cambiar las propiedades de una superficie

En este ejemplo se muestra cómo obtener las propiedades de una gráfica de superficie en MATLAB® y cómo cambiar los valores de las propiedades para personalizar la gráfica.

Objetos de superficie

Hay varias formas de crear un objeto de superficie en MATLAB. Una manera es utilizar surf.

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

figure
surf(X,Y,Z)

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

Como todos los objetos de gráficas, las superficies tienen propiedades que puede ver y modificar. Estas propiedades tienen valores predeterminados. La visualización del objeto de superficie, s, muestra las propiedades de superficie utilizadas habitualmente, como EdgeColor, LineStyle, FaceColor y FaceLighting.

s = surf(X,Y,Z)

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

s = 
  Surface with properties:

       EdgeColor: [0.1294 0.1294 0.1294]
       LineStyle: '-'
       FaceColor: 'flat'
    FaceLighting: 'flat'
       FaceAlpha: 1
           XData: [50×50 double]
           YData: [50×50 double]
           ZData: [50×50 double]
           CData: [50×50 double]

  Show all properties

Obtener propiedades de superficie individuales

Para acceder a las propiedades individuales, utilice la sintaxis de notación de puntos object.PropertyName. Por ejemplo, devuelva la propiedad FaceColor de la superficie.

s.FaceColor
ans = 
'flat'

Cambiar las propiedades de superficie utilizadas habitualmente

Hay varias funciones disponibles para cambiar las propiedades de la superficie. Por ejemplo, use la función shading para controlar el sombreado de la superficie.

shading interp    % interpolate the colormap across the surface face

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

Use la función lighting para ajustar las características de iluminación de la superficie. Para que lighting surta efecto, deberá iluminar la superficie creando un objeto de luz.

light               % create a light
lighting gouraud    % preferred method for lighting curved surfaces

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

Para cambiar la propiedad reflectante de la superficie, utilice la función material.

material dull    % set material to be dull, no specular highlights

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

Para establecer la transparencia de todos los objetos de los ejes actuales, utilice la función alpha. Esta función establece la transparencia en cualquier valor entre 1 y 0, donde 1 significa opacidad total y 0, transparencia total.

alpha(0.8)    % set transparency to 0.8

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

Cambiar otras propiedades de superficie

Para personalizar la apariencia de la superficie, cambie los valores de las propiedades usando notación de puntos.

CData define los colores para los vértices de la superficie. La propiedad FaceColor indica cómo se determinan los colores de las caras de la superficie a partir de los colores de los vértices.

s.CData = hypot(X,Y);      % set color data

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

s.FaceColor = 'interp';    % interpolate to get face colors

AlphaData define la transparencia para cada vértice de la superficie. La propiedad FaceAlpha indica cómo se determina la transparencia de las caras de la superficie a partir de la transparencia de los vértices.

s.AlphaData = gradient(Z);    % set vertex transparencies
s.FaceAlpha = 'interp';       % interpolate to get face transparencies

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

Obtener todas las propiedades de una superficie

Los objetos de gráficas en MATLAB tienen muchas propiedades. Para ver todas las propiedades de una superficie, utilice el comando get.

get(s)
          AlignVertexCenters: off
                   AlphaData: [50×50 double]
            AlphaDataMapping: 'scaled'
             AmbientStrength: 0.3000
                  Annotation: [1×1 matlab.graphics.eventdata.Annotation]
            BackFaceLighting: 'reverselit'
                BeingDeleted: off
                  BusyAction: 'queue'
               ButtonDownFcn: ''
                       CData: [50×50 double]
                CDataMapping: 'scaled'
                   CDataMode: 'manual'
                 CDataSource: ''
                    Children: [0×0 GraphicsPlaceholder]
                    Clipping: on
                 ContextMenu: [0×0 GraphicsPlaceholder]
                   CreateFcn: ''
             DataTipTemplate: [1×1 matlab.graphics.datatip.DataTipTemplate]
                   DeleteFcn: ''
             DiffuseStrength: 0.8000
                 DisplayName: ''
                   EdgeAlpha: 1
                   EdgeColor: 'none'
                EdgeLighting: 'none'
                   FaceAlpha: 'interp'
                   FaceColor: 'interp'
                FaceLighting: 'gouraud'
                 FaceNormals: [49×49×3 double]
             FaceNormalsMode: 'auto'
            HandleVisibility: 'on'
                     HitTest: on
               Interruptible: on
                   LineStyle: '-'
                   LineWidth: 0.5000
                      Marker: 'none'
             MarkerEdgeColor: 'auto'
             MarkerFaceColor: 'none'
                  MarkerSize: 6
                   MeshStyle: 'both'
                      Parent: [1×1 Axes]
               PickableParts: 'visible'
                    Selected: off
          SelectionHighlight: on
    SpecularColorReflectance: 1
            SpecularExponent: 10
            SpecularStrength: 0
                         Tag: ''
                        Type: 'surface'
                    UserData: []
               VertexNormals: [50×50×3 double]
           VertexNormalsMode: 'auto'
                     Visible: on
                       XData: [50×50 double]
                   XDataMode: 'manual'
                 XDataSource: ''
                       YData: [50×50 double]
                   YDataMode: 'manual'
                 YDataSource: ''
                       ZData: [50×50 double]
                 ZDataSource: ''