精华内容
下载资源
问答
  • FIXUILABELS 遍历包含在当前 MATLAB 图窗中的 java 对象,并为所有“文本”样式的 uicontrol 调整底层 java 对象,以便它们的文本更好地与相邻的“编辑”样式 uicontrol 在同一高度对齐。 FIXUILABELS(FIG) 修复图...
  • 将 2D 线对象 LINE_OBJ 捕捉到以下约束之一 - 一种。 另一组线路。 湾定义的网格。 C。 鼠标光标(无约束)。
  • stateflow align 实现了三个基本函数来对齐和修改图形 stateflow 对象: 1.对齐所有选定的对象都与选择中的最后一个对象对齐。 因此必须至少选择两个对象。 对特定的对齐线进行对齐。 它们是矩形图形对象的左侧、...
  • 以前一直觉得matlab GUI很鸡肋,主要是最后界面美化的时候,感觉控件对齐很麻烦,鼠标拖动不好用,对齐的话需要不停的对齐对象”,总之,觉得很麻烦。 今年帮别人用matlab GUI做了一个界面,对GUI有了新的认识,...

    以前用过matlab GUI,感觉功能操作比较鸡肋,最后界面美化的时候,控件对齐比较麻烦,鼠标拖动不好用。
    今年帮别人用matlab GUI做了一个界面,对GUI有了新的认识,其实调整多个控件的位置和尺寸,让界面美观工整,有一定技巧在里面,下面我通过一个例子来说明。
    参数输入面板有三个参数输入,用三个静态文本控件和三个动态文本控件组成。如下图所示,他们的位置不整齐,把他们位置调整整齐。
    在这里插入图片描述
    步骤1 :统一控件的外形尺寸。设置三个静态文本控件的FontSize、OuterPosition中x,y属性一致。
    布置2:设置左上角控件的位置。调整tag是“长度”的静态文本框的位置,用鼠标拖动。
    在这里插入图片描述
    步骤3:对齐左侧第一列控件。按住ctrl键,多选中三个静态文本框,选择“工具”–>“对齐对象”。纵向的对齐选“箭头”,分布选左侧第一个,设置间距20像素;横向对齐方式选“左对齐”。操作后,三个静态文本框左对齐,间距相等。
    在这里插入图片描述
    步骤4,对齐第一行控件位置。按住ctrl键,多选中tag是“长度的”静态文本框和tag是“10”的动态文本框,选择“工具”–>“对齐对象”。纵向的对齐选“上对齐”横向对齐方式选“左对齐”,分布选左侧第一个,设置间距10像素;
    在这里插入图片描述
    操作后,第一行控件对齐。
    在这里插入图片描述
    步骤5,对齐左侧第二列控件。按住ctrl键,多选中三个动态文本框,选择“工具”–>“对齐对象”。纵向的对齐选“箭头”,分布选左侧第一个,设置间距20像素;横向对齐方式选“左对齐”。操作后,三个静态文本框左对齐,间距相等。

    在这里插入图片描述
    控件对齐,操作完成。

    展开全文
  • matlab 时序对象使用

    千次阅读 2018-11-23 16:27:53
    1,创建时序对象采用timeseries() ts = timeseries(datavals,timevals,‘Name’,tsname) 参数说明:datavals 时序对象数据域;timevals 时序对象时间域;tsname 指定的时序对象名字。 2,举例说明 time = [1 2 3]; ...

    1,创建时序对象采用timeseries()
    ts = timeseries(datavals,timevals,‘Name’,tsname)
    参数说明:datavals 时序对象数据域;timevals 时序对象时间域;tsname 指定的时序对象名字。
    2,举例说明
    time = [1 2 3];
    ata = [1.1 1.2 1.3];
    ts = timeseries(data,time,‘name’,‘eg’)
    以上三行matlab代码执行后查看ts。
    出现了ts的相关信息
    3,访问时序对象用
    1> 直接访问对应的域,采样类似C语言结构体的办法,ts.name/ts.data/ts.time
    2> 访问某个时间段的数据,如上面例子,访问时间大于1的数据。
    index = find(ts.time>1);
    index返回对应的数据索引。
    3> 删除对应时间段的数据,利用了上面的索引
    ts = delsample(ts,‘Index’, index );
    4,时序对象对齐——时序对象还可以采样重采样进行对齐,这是时序对象处理数据重要的优势。
    本人提供一个函数如下,。
    function T1 = TimeAlignment(TS1,TS2)
    %对一个时序变量向另一个时序变量的时间对齐
    TS1= resample(TS1,TS2.time,‘linear’);% 重新采样(插值)
    TS1.Data(isnan(TS1.Data)) = 0;%因为插值有问题Cell_Var_ccp{9}.Data(some)=NaN
    end

    展开全文
  • 有效的选项是: n:归一化单位c:居中水平对齐r:右水平对齐l:左水平对齐t:顶部垂直对齐b:底部垂直对齐m:中间垂直对齐 例子: ltext(1,1,'左上角的文字','nrt') ----- 阿斯拉克咧嘴笑 2014
  • MATLAB生成cuda代码使用 此代码存储库包含我们ECCV视频检测工作的实现。 如果您使用此代码,请引用: ,以及在ECCV 2018中。 入门 安装 以下安装过程在以下条件下进行了测试: Ubuntu 16.04 CUDA 9.0 Torch 7 创建一...
  • Matlab_GUI学习笔记(五)——常用对象的属性之Line 1. Line 很多属性与之前的Figure与Axes属性差别不大,重点在于Line的核心属性Data。 >> get(line) AlignVertexCenters: 'off' Annotation: [1×1 matlab...

    Matlab_GUI学习笔记(五)——常用对象的属性之Line


    1. Line

    很多属性与之前的FigureAxes属性差别不大,重点在于Line的核心属性Data

    >> get(line)
        AlignVertexCenters: 'off'
                Annotation: [1×1 matlab.graphics.eventdata.Annotation]
              BeingDeleted: 'off'
                BusyAction: 'queue'
             ButtonDownFcn: ''
                  Children: [0×0 GraphicsPlaceholder]
                  Clipping: 'on'
                     Color: [0 0 0]
                 CreateFcn: ''
                 DeleteFcn: ''
               DisplayName: ''
          HandleVisibility: 'on'
                   HitTest: 'on'
             Interruptible: 'on'
                  LineJoin: 'round'
                 LineStyle: '-'
                 LineWidth: 0.5000
                    Marker: 'none'
           MarkerEdgeColor: 'auto'
           MarkerFaceColor: 'none'
             MarkerIndices: [1 2]
                MarkerSize: 6
                    Parent: [1×1 Axes]
             PickableParts: 'visible'
                  Selected: 'off'
        SelectionHighlight: 'on'
                       Tag: ''
                      Type: 'line'
             UIContextMenu: [0×0 GraphicsPlaceholder]
                  UserData: []
                   Visible: 'on'
                     XData: [0 1]
                     YData: [0 1]
                     ZData: [1×0 double]
    
    • XData&YData&ZData
      Line对象的核心属性,决定绘制什么曲线。
    展开全文
  • 用于与 Allen Brain Observatory 数据集交互的 MATLAB 工具箱 [1]。 Brain Observatory Toolbox (BOT) 提供了一个统一的界面来访问和使用 Visual Coding Neuropixels [2] 和 Visual Coding 2P [3] 数据集。 BOT ...
  • MATLAB 第9章 图形对象

    千次阅读 2020-06-29 20:36:15
    MATLAB 句柄来标识对象,我们可以通过句柄来访问相应对象的属性。MATLAB R2014b以后的版本采用OpenGL作为默认图形渲染器,加强和扩展了通过图形对象句柄对各种图形对象进行修改和控制的方法。 第4章介绍的绘图函数...

    转载于《MATLAB基础与应用教程(第2版)》蔡旭晖 刘卫国 蔡立燕 | 微信读书链接

    MATLAB 的图形是由不同图形对象组成的。
    MATLAB 用句柄来标识对象,我们可以通过句柄来访问相应对象的属性。MATLAB R2014b以后的版本采用OpenGL作为默认图形渲染器,加强和扩展了通过图形对象句柄对各种图形对象进行修改和控制的方法。
    第4章介绍的绘图函数主要通过命令参数控制图形的绘制过程,图形每一部分的属性都是按默认属性或命令中选项的指定值进行设置,适用于绘制简单界面、单一图形,充分体现了 MATLAB 语言的实用性。
    相对于命令参数的自定义绘图,通过句柄设置对象属性,绘图操作控制和表现图形的能力更强,可以对图形对象进行更灵活、精细的控制,充分体现了MATLAB语言的开放性。
    【学习目标】
    ● 了解图形对象和图形对象句柄的基本概念。
    ● 掌握图形对象属性的基本设置方法。
    ● 掌握利用图形对象控制绘图操作的方法。
    ● 熟悉图形对象优化方法。

    9.1 图形对象及其句柄

    MATLAB的图形系统是面向对象的,图形类是MATLAB为了描述具有类似特征的图形元素而定义的具有一些公共属性的抽象的元素集合,而由图形类定义的图形对象是用于控制图形显示和生成用户界面的基本要素。

    9.1.1 图形对象的基本概念

    MATLAB 的图形对象包括图形窗口、坐标轴、用户界面控件、曲线、曲面、文本、图像等。在MATLAB中,每一个具体的图形都是由若干个不同的图形对象组成的,例如绘图操作中,曲线、曲面、坐标轴、图形窗口,都是图形对象。图形对象是有层次的,其层次结构如图9.1所示,系统将各种图形对象按树形结构组织起来。一个项目可以包含一个或多个图形窗口,一个图形窗口可包含一组或多组坐标轴,每一组坐标轴上又可绘制多种图形,如曲线、曲面、文本等。
    图形窗口(Figure)对象是显示图形的窗口和与用户进行交互的界面,其他图形对象都是图形窗口对象的子对象。图形窗口是根对象下的一级对象,坐标轴和用户界面对象是图形窗口的子对象,图形对象(曲线、曲面、文本)和图表等是坐标轴的子对象。通常,我们直接在坐标轴中放置图形对象和图表,但有时为方便管理,也可以用组对象作为容器,容纳相关联的图形对象和图表。
    图9.1 图形对象的层次结构9.1 图形对象的层次结构

    创建图形对象的函数与所创对象的类型有相同名称。例如,text函数创建Text(文本)对象, figure函数创建Figure(图形窗口)对象。
    在 MATLAB 系统中建立一个对象,系统就会建立一个映射该对象的句柄,用于存储相应对象的属性。在MATLAB中,我们可以通过句柄对图形对象进行操作。

    9.1.2 图形对象句柄

    在以前的MATLAB 版本中,图形句柄(Handle)是一个实数,从R2014b起,图形句柄成为对象句柄。一个句柄对应着一个图形对象,可以用对象句柄设置和查询对象属性。
    MATLAB提供了若干个函数用于识别特定图形对象,如表9.1所示。
    表9.1 常用图形对象的识别函数
    [插图]
    可以利用图形对象的Parent属性获取包容此图形对象的容器,Children属性获取此对象所容纳的图形对象。在获取对象的句柄后,可以通过句柄来获取或设置对象的属性。
    【例9.1】 绘制曲线并查看有关对象的属性。
    命令如下:

    >> x=linspace(-pi,pi,30);
    >> plot(x,5*sin(x),'rx',x,x.^2,x,1./x);
    >> h1=gca;    %获取当前坐标轴的句柄
    >> h1.Children  %查询当前坐标轴的子对象
    ans =
      3x1 Line 数组:
      Line
      Line
      Line
    

    结果显示当前坐标轴中有3个曲线对象,要查看其中某个对象的属性,如第1个对象,使用以下命令:

    >> h1.Children(1)
      Line (具有属性):
           Color: [0.8500 0.3250 0.0980]
        LineStyle: '-'
        LineWidth: 0.5000
         Marker: 'none'
         MarkerSize: 6
          MarkerFaceColor: 'none'
            XData: [1x30 double]
         YData: [1x30 double]
          ZData: [1x0 double]
          显示 所有属性
    

    单击最后一行的链接“所有属性”,则会显示该对象的所有属性值。

    9.1.3 图形对象属性

    每种图形对象都具有各种各样的属性(Property),MATLAB 就是通过对属性的操作来控制和改变图形对象的外观和行为的。
    1.属性名与属性值
    同一类对象有着相同的属性,属性的取值决定了对象的表现。例如,LineStyle是曲线对象的一个属性,它的值决定着线型,取值可以是’-’ 、’:’、’-.’、’–’或’none’。在属性名的写法中,不区分字母的大小写,而且在不引起歧义的前提下,属性名可以只写前一部分。例如,lines就代表LineStyle。
    2.属性的操作
    访问图形对象是指获取或设置图形对象的属性。不同图形对象所具有的属性不同,但访问的方法是一样的。MATLAB 2014b及以后的版本,一般使用点运算符来访问对象属性,一般形式是:对象句柄.属性名。例如,h1.Color表示引用图形对象h1的Color属性。
    (1)设置图形对象属性

    H.属性名=属性值
    

    其中,H是图形对象的句柄。绘制二维和三维曲线时,可以通过设置已有图形对象的属性修改曲线的颜色、线型和数据点的标记符号等。例如,绘制正弦曲线,然后将曲线线型修改为虚线,线条颜色为红色,可使用以下命令:

     >>h1=fplot(@(x)sin(x),[0,2*pi]);
     >>h1.Color=[1 0 0];
     >>h1.LineStyle=':'
    

    这种设置图形对象属性的方法每次只能作用于一个图形对象。若同时设置一组图形对象的属性,可以使用set函数。set函数的调用格式为

    set(H,Name,Value)
    set(H,NameArray,ValueArray)
    

    其中,H用于指明要操作的图形对象,如果H是一个由多个图形对象句柄构成的向量,则操作施加于H的所有对象。第1种格式,Name指定属性,属性名要用单撇号括起来,Value为该属性的值。第2种格式中,NameArray、ValueArray是单元数组,存储了H所有对象的属性,NameArray存储属性名,ValueArray存储属性值。要为m个图形对象中的每个图形对象设置n个属性值,则NameArray是有n个元素的行向量,ValueArray应为m×n的单元数组。例如,绘制3条曲线,然后将曲线线型全部修改为虚线,线条颜色为蓝色,可以使用以下命令:

    >> hlines=fplot(@(x)[sin(x),sin(2*x),sin(3*x)],[0,2*pi]);
    >> set(hlines,'Color',[0 0 1],'LineStyle',':')3条曲线分别采用不同颜色、不同线型,则可以使用以下命令:
    >> hlines=fplot(@(x)[sin(x),sin(2*x),sin(3*x)],[0,2*pi]);
    >> NArray={'LineStyle','Color'};
    >> VArray={'--',[1 0 0]; ':',[0 1 0]; '-.',[0 0 1]};
    >> set(hlines,NArray,VArray)
    

    (2)获取图形对象属性

    V=H.Name
    

    其中,H是图形对象的句柄,Name是属性名。例如,以下命令用来获得前述曲线h1的颜色属性值:

    >> hcolor=h1.Color   %或hcolor=get(h1,'Color')
    hcolor =
      1   0   0
    

    这种方法每次只能获取一个图形对象的属性。若需要获取一组图形对象的属性,可以采用get函数。get函数的调用格式为

    V=get(H,Name)
    

    其中,H是图形对象句柄,选项Name指定要访问的属性,V存储返回的属性值。如果在调用get函数时省略Name,将返回对象所有的属性值。例如,hlines是前面绘制的一组图形对象的句柄,包含3条曲线,要得到这些曲线的属性,可以使用以下命令:

    >> hlines_p=get(hlines,{'Color','LineStyle'})
    hlines_p =
      3×2 cell 数组
       {1×3 double} {'--'}
       {1×3 double} {':' }
       {1×3 double} {'-.'}
    

    (3)属性检查器
    可通过inspect函数打开属性检查器,查询和修改图形对象的属性。inspect函数的调用格式如下:

    inspect(H)
    inspect([h1,h2,])
    

    其中,参数H、h1、h2等是图形对象句柄。第2种格式在打开属性检查器后,只显示所列图形对象都拥有的属性。例如:

    >> x=linspace(0,2*pi,100);
    >> h1=plot(x,log(x).*sin(x),'r:');
    >> inspect(h1);
    >> h2=text(1,0,'example');
    >> inspect([h1,h2])
    

    执行命令“inspect(h1)”打开图9.2(a)所示检查器,执行命令“inspect([h1,h2])”打开图9.2 (b)所示检查器。
    在这里插入图片描述
    图9.2 图形对象属性检查器
    3.对象的公共属性
    图形对象具有各种各样的属性,有些属性是所有对象共同具备的,有些属性则是各对象所特有的。这里先介绍图形对象的常用公共属性,即大部分对象都具有的属性。

    1. Children属性。属性值是所有子对象的句柄构成的一个数组。
    2. Parent属性。属性值是该对象的父对象句柄。
    3. Color属性。属性值是一个颜色值,既可以用字符表示,又可以用RGB三元组表示。
    4. Position属性。属性值是一个由4个元素构成的行向量,其形式为[x, y, w, h]。这个向量定义了图形对象在上层对象上的位置和大小,其中x和y分别为对象左下角的横坐标、纵坐标, w和h分别为图形对象的宽度和高度。
    5. Units属性。定义图形对象所使用的长度单位,由此决定图形对象的大小与位置。该属性的取值可以是下列字符串中的任何一种:‘pixel’(像素)、‘normalized’(依据父对象进行归一化)、‘inches’(英寸)、‘centimeters’(厘米)、‘points’(磅,1磅=1/72英寸)和’characters’(字符)。Units属性值除了’normalized’以外,其他单位都是绝对度量单位。'normalized’指的是相对于父对象大小的比例,将父对象的左下角映射为(0,0),而右上角映射为(1.0,1.0),Position属性值在0~1。Units属性将影响一切定义大小的属性,如前面的Position属性。
    6. Tag 属性。属性值是对象的标识名。当一个程序中包含很多类型、名称各不相同的对象时,我们可以通过Tag属性给每个对象建立标识,方便对这些对象管理。
    7. Type属性。属性值是对象的类型,这是一个只读属性。
    8. Visible属性。属性值是’On’(默认值)或’Off’,决定着图形对象在图形窗口中是否可见。
    9. CreateFcn 属性和DeleteFcn属性。用于指定创建图形对象和删除图形对象时调用的函数或执行的命令,可取值为函数句柄、由函数句柄和参数构成的单元数组、函数名或命令字符串。
    10. KeyPressFcn属性。用于指定键盘按键事件发生时调用的函数或执行的命令。
    11. WindowButtonDownFcn或ButtonDownFcn属性。用于指定鼠标按键事件发生时调用的函数或执行的命令。
    12. WindowButtonMotionFcn属性。用于指定鼠标光标移动事件发生时调用的函数或执行的命令。

    【例 9.2】 分别在并排的两个坐标轴中绘制一条曲线和一个曲面。然后设置左坐标轴的背景色为黄色,曲线线条颜色为红色,设置右坐标轴的背景色为青色。
    程序如下:

    subplot(1,2,1);
    h1=fplot(@(t)t.*sin(t),@(t)t.*cos(t),[0,6*pi]);
    axis equal;
    subplot(1,2,2);
    [x,y,z]=peaks(20);
    h2=mesh(x,y,z);
    h10=h1.Parent;
    h10.Color='y';
    h1.Color='r';
    h2.Parent.Color='cyan'
    

    9.2 图形窗口对象与坐标轴对象

    所有图形对象都可以由与之同名的绘图函数创建。所创建的对象置于某个父对象中,当父对象不存在时,MATLAB会自动创建它。例如,用plot函数画一条曲线,假如在画线之前,坐标轴已经存在,则在当前坐标轴上画线;若坐标轴不存在,MATLAB会自动创建它们。
    前面介绍了图形对象的公共属性,本节介绍图形窗口对象和坐标轴对象的创建方法及特殊属性。

    9.2.1 图形窗口对象

    图形窗口是显示图形及与用户交互的窗口。每一个图形窗口可以作为其他图形对象的父对象,即当作坐标轴、控件等对象的容器。MATLAB的一切图形图像的输出都是在图形窗口中完成的。掌握好图形窗口的控制方法,对于充分发挥 MATLAB 的图形功能和设计高质量的用户界面是十分重要的。
    1.图形窗口的基本操作
    MATLAB通过figure函数来创建窗口对象,其调用格式为

    句柄变量=figure(属性名1,属性值1,属性名2,属性值2,)
    

    其中,属性用于设置图形窗口的呈现方式。如果调用时不带参数,则按图形窗口的默认属性值建立图形窗口。
    如果figure函数的参数是窗口句柄,即

    figure(窗口句柄)
    

    则设定该句柄对应的窗口为当前窗口,随后的操作都是在这个窗口中实施的。
    要关闭图形窗口,应使用close函数,其调用格式为

    close(窗口句柄)
    close all
    

    “close all”命令关闭所有的图形窗口。
    要清除图形窗口的内容,但不关闭窗口,则使用clf函数,其调用格式为

    clf(窗口句柄)
    

    不带参数的clf函数,表示清除当前图形窗口的内容。
    2.图形窗口的属性
    图形窗口除公共属性外,还有控制图形窗口外观、交互控制、回调执行控制、键盘控制、鼠标控制、窗口控制等多类属性,常用属性如下。

    1. Name属性。属性值是一个字符串,用于指定图形窗口的标题,默认为空。一般情况下,图形窗口的默认标题形式为Figure n,这里n是图形窗口的序号。
    2. Number属性。它是图形窗口的序号。
    3. NumberTitle属性。决定着在图形窗口的标题中是否以“Figure n:”为标题前缀。属性值可以是’on’(默认值)或’off’。
    4. MenuBar 属性。用于控制图形窗口是否具有菜单栏。属性值可以是’figure’(默认值)或’none’。如果值为’none’,则表示该图形窗口没有菜单栏;如果值为’figure’,则该窗口将显示图形窗口默认的菜单栏。
    5. ToolBar属性。用于控制图形窗口是否具有工具栏,属性值可以是’auto’(默认值)、‘figure’或’none’。如果值为’auto’,表示沿用MenuBar属性的设置。
    6. Pointer 属性。用于指定光标指针样式,属性值是一个字符串,可取值包括’arrow’(默认值)、‘ibeam’、‘watch’、‘circle’、‘cross’、'hand’等,分别对应典型的光标指针。
    7. SizeChangedFcn 和ResizeFcn 属性。用于指定当窗口大小发生改变和窗口大小重新定义时调用的函数或命令。
    8. KeyPressFcn 和 KeyReleaseFcn 属性。用于指定当键盘键按下、键盘键释放时调用的函数或执行的命令。
    9. ButtonDownFcn、WindowButtonMotionFcn、WindowButtonUpFcn、WindowScrollWheelFcn属性。分别用于指定鼠标键按下、鼠标光标移动、鼠标键释放、鼠标轮滚动时调用的函数或执行的命令。

    图形窗口对象的默认度量单位(Units)为’pixels’,即像素。
    【例 9.3】 建立一个图形窗口。该图形窗口没有菜单条,标题名称为“图形窗口实例”。图形窗口位于距屏幕左下角(2, 2)(单位:cm)处,宽度和高度分别为24cm和16cm。当用户在键盘上按下任意键时,在图形窗口绘制正弦曲线。
    程序如下:

    hf=figure;
    hf.MenuBar='None';
    hf.NumberTitle='Off';
    hf.Name=’图形窗口实例’;
    hf.Units='centimeters'; %设置度量单位为cm
    hf.Position=[2,2,24,16];
    hf.KeyPressFcn='fplot(@(x)sin(x),[0,2*pi])'
    

    9.2.2 坐标轴

    坐标轴是在图形窗口中定义的一个画图区域。坐标轴对象是图形窗口的子对象,每个图形窗口中可以定义多个坐标轴,但只有一个坐标轴是当前坐标轴。坐标轴对象是图形对象的父对象,即当作图形图像的容器。在没有指明坐标轴时,所有的图形图像都是在当前坐标轴中输出。
    1.坐标轴的基本操作
    建立坐标轴对象使用axes函数,其调用格式为
    句柄变量=axes(parent,属性名1,属性值1,属性名2,属性值2,…)
    其中,属性用于设置坐标轴的特征,选项parent用于指定坐标轴的父对象,可以是图形窗口对象、面板对象或选项卡对象的句柄。若调用axes函数时不带参数,则按坐标轴的默认属性在当前图形窗口创建坐标轴。
    如果axes函数的参数是坐标轴句柄,即

    axes(坐标轴句柄)
    

    则设定该句柄代表的坐标轴为当前坐标轴,随后绘制的图形都显示在这个坐标轴中。
    要清除坐标轴中的图形,则使用cla函数,其调用格式为

    cla(坐标轴句柄)
    

    不带参数的cla函数,表示清除当前坐标轴中的图形。
    2.坐标轴的属性
    坐标轴除公共属性外,还有控制坐标轴外观、标度、刻度、网格、视图等特征的属性,常用属性如下。

    1. Box属性。决定坐标轴是否带有边框,可取值为’on’或’off’。
    2. GridLineStyle属性。用于定义网格线的类型,可取值是’-’(默认值)、’:’、’-.’、’–’或’none’。
    3. Title属性。用于设置和修改坐标轴标题,值是通过title函数建立的标题对象的句柄。
    4. XLabel、YLabel、ZLabel属性。用于设置和修改x、y、z轴的标签,取值分别是通过xlabel、ylabel、zlabel函数建立的标签对象的句柄。
    5. XLim、YLim、ZLim 属性。取值是二元向量[Lmin,Lmax],分别定义 x、y、z 轴的下限和上限,默认为[0,1]。
    6. XScale、YScale、ZScale 属性。用于定义x、y、z轴的刻度类型,取值是’linear’(默认值)或’log’,即线性坐标或对数坐标,默认采用线性坐标。
    7. XTickLabel、YTickLabel、ZTickLabel属性。用于定义x、y、z轴的刻度线标签,取值是字符串矩阵。例如,将坐标轴的x轴刻度线标签改为循环使用字母A~F,可执行以下命令:ax.XTickLabel=['A';'B';'C';'D';'E';'F'];
    8. Xdir、Ydir、Zdir属性。用于定义沿x、y、z轴逐渐增加的值的方向,取值是’normal’(默认值)或’reverse’,分别表示值正向递增或反向递增。
    9. View 属性。用于定义视点,取值是二元向量[azimuth,elevation],azimuth 指定观察方位角,elevation指定仰角,默认为[0,90]。

    坐标轴对象的默认度量单位(Units)为’normalized’,即根据容器(图形窗口或面板)进行归一化,容器的左下角映射为(0,0),右上角映射为(1,1)。
    【例9.4】 利用坐标轴对象实现图形窗口的任意分割。
    程序如下:

    [x,y]=meshgrid(0:0.1:pi/2,0:0.05:pi);
    z=sin(x.^2)+cos(y.^2);
    ha1=axes('Position',[0.05,0.6,0.3,0.3]);
    plot(x,z);
    ha1.YDir='reverse'; %设置y轴反向递增
    ha2=axes('Position',[0.45,0.6,0.5,0.35]);
    plot3(x,y,z);
    ha2.View=[45,-45];  %设置视点方位角和仰角
    ha3=axes('Position',[0.1,0.05,0.8,0.5]);
    plot3(x,y,z);
    grid on;       %显示网格线
    

    程序执行结果如图9.3所示。利用axes函数可以在不影响图形窗口上其他坐标轴的前提下建立一个新的坐标轴,从而实现图形窗口的任意分割。
    在这里插入图片描述
    图9.3 利用坐标轴对象分割图形窗口

    9.3 图形数据对象

    MATLAB将曲线、矩形、曲面、文本,以及图形中的标注、图例等均视为图形数据对象,本节介绍图形数据对象的操作。

    9.3.1 曲线对象

    曲线对象既可以定义在二维坐标系中,又可以定义在三维坐标系中。曲线对象除了用第4章介绍的plot、plot3函数创建外,还可以用line函数创建。line函数调用格式为

    h=line(ax,x,y,属性名1,属性值1,属性名2,属性值2,)
    
    h=line(ax,x,y,z,属性名1,属性值1,属性名2,属性值2,)
    

    其中,输入参数x、y、z的含义和用法与plot、plot3函数一样,属性的设置与前面介绍过的figure、axes函数类似。选项ax用于指定曲线所属坐标轴,默认在当前坐标轴绘制曲线。
    曲线对象除具有Parent、Color、Type、Tag、Visible等公共属性外,还有一些控制曲线外观、行为等特征的属性,常用属性如下。

    1. LineStyle属性。用于定义线型,可取值参见表4.1,默认值为’-’。
    2. LineWidth属性。用于定义线宽,默认值为0.5磅。
    3. LineJoin属性。用于定义线条边角的样式,可取值是’round’(默认值)、‘miter’、‘chamfer’,分别表示圆角、尖角、方角。
    4. Marker属性。用于定义标记符号,可取值参见表4.3,默认值为’none’。
    5. MarkerSize属性。用于定义标记符号的大小,默认值为6磅。
    6. MarkerEdgeColor属性。用于定义标记符号边框的颜色,默认值为’auto’。
    7. MarkerFaceColor属性。用于定义标记符号内的填充色,默认值为’none’。
    8. XData、YData、ZData属性。属性值是数值向量,分别存储曲线对象各个数据点的位置数据,XData、YData默认为[0,1],ZData默认为空矩阵。

    曲线的默认度量单位(Units)为磅。plot函数每调用一次,就会刷新坐标轴,清空原有图形,再绘制新的曲线,而line函数生成的曲线则在已有图形上叠加显示。

    【例9.5】 利用line函数绘制曲线 y = e − t s i n 2 π t y=e^{−t}sin2πt y=etsin2πt y = c o s ( π t / 2 ) y=cos(\pi t/2) y=cos(πt/2)
    程序如下:

    t=linspace(0,4,100);
    y=sin(2*pi*t).*exp(-t);
    figure('Position',[120,100,480,320]);
    ha=axes('GridLineStyle','-.');
    htitle=get(ha,'Title');
    htitle.String='e^{-t}sin(2{\pi}t) 和 cos({\pi}t/2)';
    hl1=line('XData',t,'YData',sin(2*pi*t).*exp(-t));
    hl1.LineStyle='-.';
    hl2=line('XData',t,'YData',cos(pi/2*t));
    hl2.LineStyle=':';
    grid on
    

    程序执行结果如图9.4所示。
    [插图]
    图9.4 利用曲线对象绘制曲线

    9.3.2 曲面对象

    1.建立曲面对象
    建立曲面对象除了使用第4章介绍的mesh、surf等函数外,还可以使用surface函数,其调用格式为:

    h=surface(ax,Z,C,属性名1,属性值1,属性名2,属性值2,)
    
    h=surface(ax,X,Y,Z,C,属性名1,属性值1,属性名2,属性值2,)
    

    一般情况下,参数X、Y、Z是同型矩阵,X、Y是平面网格坐标矩阵,Z是网格点上的高度矩阵。当输入参数只有一个矩阵Z时,将Z每个元素的行和列索引用作x和y坐标,将Z每个元素的值用作z坐标绘制图形。选项C用于指定在不同高度下的曲面颜色。C省略时,MATLAB认为C=Z,亦即颜色的设定是正比于图形高度的。选项ax用于指定曲面所属坐标轴,默认在当前坐标轴绘制图形。
    曲面对象除具有Parent、Type、Tag、Visible等公共属性外,还有一些与曲面形态有关的特有属性,常用属性如下。

    1. EdgeColor属性。用于定义曲面网格线的颜色。属性值是代表某颜色的字符或RGB向量,还可以是’flat’、‘interp’或’none’,默认为[0 0 0](黑色)。
    2. FaceColor 属性。用于定义曲面网格片的颜色或着色方式。属性值是代表某颜色的字符或RGB 向量,还可以是’flat’(默认值)、‘interp’、‘texturemap’或’none’。'flat’表示每一个网格片用单一颜色填充;'interp’表示用渐变方式填充网格片;'none’表示网格片无颜色;'texturemap’表示用Cdata属性定义的颜色填充网格片。
    3. FaceAlpha属性。用于定义曲面的透明度,可取值为0(完全透明)~1(完全不透明)之间的数或’flat’、‘interp’、texturemap,默认为1。
    4. FaceLighting 属性。用于定义投影到曲面的灯光的效果,可取值为’flat’(默认值)、‘gouraud’、‘none’。
    5. BackFaceLighting属性。用于定义背光效果,可取值为’reverslit’(默认值)、‘unlit’、‘lit’。
      曲面的默认度量单位(Units)为磅。surf、mesh函数每调用一次,就会刷新坐标轴,清空原有图形,再绘制新的图形,而surface函数生成的曲面则在已有图形上叠加显示。

    【例9.6】 利用曲面对象绘制三维曲面z = x2− 2y2。
    程序如下:

    [x,y]=meshgrid(-10:0.5:10);
    z=x.^2-2*y.^2;
    axes('view',[-37.5,30],'Position',[0.05,0.1,0.4,0.85]);
    hs1=surface(x,y,z);
    hs1.FaceColor='none'; %设置网格片无填充
    hs1.EdgeColor='b';  %设置网格片边框为蓝色
    hT1=get(gca,'Title');
    set(hT1,'String',’网格曲面’,'FontSize',12,'Position',[5,10]);
    axes('view',[-37.5,30],'Position',[0.55,0.1,0.4,0.85]);
    hs2=surface(x,y,z);
    hs2.FaceColor='interp'; %设置网格片用渐变色填充
    hs2.EdgeColor='flat';  %设置网格片边框为单一颜色
    hT2=get(gca,'Title');
    set(hT2,'String',’着色曲面’,'FontSize',12,'Position',[5,10])
    

    执行程序,绘制出的图形如图9.5所示。
    2.设置曲面颜色
    曲面对象的CData属性称为颜色索引,用于定义曲面顶点的颜色。CData 属性的定义有以下两种方法。
    [插图]
    图9.5 利用曲面对象绘制的网格曲面和着色曲面
    (1)使用色图
    若 CData 属性值是一个 m×n(与输入参数 X、Y、Z 同型)的矩阵 C,则 C 中数据与色图(Colormap)中的颜色相关联,曲面网格顶点(i, j)的颜色为C(i, j)在色图中对应的颜色。MATLAB默认将CData属性完整的数据范围映射到色图上,颜色索引的最小值映射到色图矩阵的第一个RGB三元组,最大值映射到色图矩阵的最后一个 RGB 三元组,所有中间值线性映射到色图矩阵中间的RGB三元组。
    【例9.7】 绘制三维曲面 z = x 2 − 2 y 2 z = x^2− 2y^2 z=x22y2。生成一个与z同型的随机矩阵C,将其作为CData属性值,观察曲面颜色与矩阵C的对应关系。
    程序如下:

    [X,Y]=meshgrid(-10:1:10);
    Z=X.^2-2*Y.^2;
    %生成元素值在[11,19]的随机矩阵
    C=randi(9,size(Z))+10;
    axes('view',[-37.5,30]);
    h1=surface(X,Y,Z);
    h1.CData=C;
    colorbar
    Cmap=colormap(gray)
    

    执行程序,绘制出的图形如图9.6所示。“colorbar”命令用于显示颜色栏,颜色栏的数据标记显示出数据与颜色的对应关系。程序中使用gray色图,C的最小值11映射到色图的第1个颜色(黑色,[0 0 0]),最大值19映射到色图的最后1个颜色(白色,[255 255 255]),其他值线性映射到色图中间的其他颜色。
    CData 属性仅影响 CDataMapping 属性为’scaled’的图形对象。如果 CDataMapping 属性值为’direct’,则颜色索引的所有值不进行比例缩放,小于1的值都将裁剪映射至色图中的第一种颜色,大于色图长度的值则裁剪映射至色图中的最后一种颜色。
    (2)使用自定义颜色
    若CData是一个m×n×3(输入参数X、Y、Z是m×n矩阵)的三维数组,则曲面网格顶点使用CData的第3维的RGB三元组定义的颜色。
    在这里插入图片描述
    图9.6 曲面对象的颜色映射

    9.3.3 文本对象

    使用text函数可以创建文本对象。text函数的调用格式为

    h=text(ax,x,y,说明文本,属性名1,属性值1,属性名2,属性值2,)
    
    h=text(ax,x,y,z,说明文本,属性名1,属性值1,属性名2,属性值2,)
    

    其中,x、y、z定义文本对象的位置。说明文本中除使用标准的ASCII字符外,还可使用TeX的标识。选项ax用于指定文本对象所属坐标轴,默认在当前坐标轴输出文本。例如,执行以下命令:

    h=text(10,8,50,'{\gamma}={\rho}^2');
    

    将在当前坐标轴的指定位置输出 γ = ρ 2 γ = ρ2 γ=ρ2
    文本对象除具有公共属性和曲线对象的属性(用于指定文本对象边框属性)外,还有一些与文本呈现效果有关的特有属性,常用属性如下。

    1. String属性。指定显示的文本,属性值可以是数、字符数组、单元数组。
    2. Interpreter属性。用于控制对文本字符的解释方式,属性值是’tex’(默认值,使用TeX标记子集解释字符)、‘latex’(使用LaTeX标记子集解释字符)或’none’。常用TeX标识符参见表4.5。
    3. 字体属性。这类属性有FontName、FontSize、FontAngle等。FontName属性用于指定文本使用的字体的名称,取值是系统支持的字体名称或’FixedWidth’,如’楷体’;FontSize属性指定字体大小,度量单位默认为磅,FontSize 默认值取决于操作系统和区域设置;FontWeight 属性用于指定文本字符是否加粗,取值是’normal’(默认值)或’bold’(加粗);FontAngle 属性用于设置文本字符是否倾斜,取值是’normal’(默认值)或’italic’(倾斜)。
    4. Rotation 属性。用于定义文本旋转方向,取正值时表示逆时针方向旋转,取负值时表示顺时针方向旋转。属性值是以度为单位的数,默认为0。
    5. HorizontalAlignment属性。控制文本水平方向的对齐方式,其取值为’left’(默认值)、‘center’或’right’。
    6. VerticalAlignment属性。控制文本垂直方向的对齐方式,其取值为’middle’(默认值)、‘top’、‘bottom’、‘baseline’或’cap’。

    【例9.8】 利用曲线对象绘制曲线并利用文本对象完成标注。
    程序如下:

    x=-pi:0.1:pi;
    y1=sin(x);
    y2=cos(x);
    h1=line(x,y1,'LineStyle',':');
    h2=line(x,y2,'LineStyle','--');
    xlabel('{-\pi}{\leq}{\Theta}{\leq}{\pi}');
    ylabel('sin{\Theta}');
    text(-pi/4,sin(-pi/4),'{\leftarrow}sin(-{\pi}{\div}4)','FontSize',12)
    

    程序执行结果如图9.7所示。
    [插图]
    图9.7 利用曲线对象绘制曲线并标注

    9.3.4 其他图形数据对象

    1.补片对象
    补片对象是由一个或多个多边形构成的。在MATLAB中,创建补片对象的函数是patch函数,通过定义多边形的顶点和多边形的填充颜色来实现。patch函数的调用格式为

    patch(ax,X,Y,C,属性名1,属性值1,属性名2,属性值2,)
    
    patch(ax,X,Y,Z,C,属性名1,属性值1,属性名2,属性值2,)
    

    其中,X、Y、Z定义多边形顶点。若X、Y、Z是有n个元素的向量,则绘制一个有n个顶点的多边形;若X、Y、Z是m × n的矩阵,则每一列的元素对应一个m边形,绘制n个m边形。参数C指定填充颜色。选项ax用于指定补片对象所属坐标轴,默认在当前坐标轴绘制图形。
    补片对象除具有曲面对象的基本属性外,还具有控制补片对象特征的特有属性,常用属性如下。

    1. Vertices和Faces属性。取值是一个m × n的矩阵。Vertices属性定义每个顶点的坐标。Faces属性定义每个面的顶点连接,值矩阵的每一行指定一个面的所有顶点,图形由m个面构成,每个面最多有n个顶点。
    2. FaceVertexCData属性。用于指定每个补片的面和顶点的颜色。
    3. XData、YData和ZData属性。其取值是向量或同型矩阵,分别定义各顶点的x、y、z坐标。若它们为矩阵,则每一列对应一个多边形。

    【例9.9】 用patch函数绘制两个三角形。
    三角形可以当成有3个顶点的多边形处理,程序如下:

    x=[0;3;0;1;4;1];
    y=[1;1;3;3.5;2;5];
    X=[x(1:3,1),x(4:6,1)];
    Y=[y(1:3,1),y(4:6,1)];
    C=rand(size(X));
    patch(X,Y,C)
    

    程序执行结果如图9.8所示。下面通过指定补片对象的Vertices和Faces属性绘制这些图形,程序如下:

    x=[0;3;0;1;4;1];
    y=[1;1;3;3.5;2;5];
    v=[x,y];
    f=[1,2,3;4,5,6];
    col=rand(6,1);
    patch('Faces',f,'Vertices',v,'FaceVertexCData',col, ...
    'FaceColor','interp')
    

    在这里插入图片描述
    图9.8 利用补片对象绘制的多边形
    2.矩形对象
    在 MATLAB 中,矩形、椭圆及二者之间的过渡图形(如圆角矩形),都称为矩形对象。创建矩形对象的函数是rectangle,该函数调用格式为

    rectangle(属性名1,属性值1,属性名2,属性值2,)
    

    除公共属性外,矩形对象还有Curvature属性,定义水平和垂直方向的曲率。Curvature属性用二元向量[x, y]定义,x和y的取值范围为[0,1],x指定水平方向的曲率,y指定垂直方向的曲率。如果Curvature设置为[0, 0],则生成直角矩形;Curvature设置为[1, 1],则生成椭圆。如果值用标量定义,则表示两个方向的曲率一致。Curvature的默认值为[0, 0]。
    【例9.10】 在同一坐标轴中绘制矩形、圆角矩形、椭圆和圆。
    程序如下:

    rectangle('Position',[0,0,40,30],'LineWidth',2,'EdgeColor','r');
    rectangle('Position',[5,5,20,30],'Curvature',.4,'LineStyle','-.');
    rectangle('Position',[10,10,30,20],'Curvature',[1,1],'LineWidth',2);
    rectangle('Position',[0,0,30,30],'Curvature',[1,1],'EdgeColor','b');
    axis equal
    

    程序执行结果如图9.9所示。
    [插图]
    图9.9 不同样式的矩形对象

    9.3.5 动画对象

    MATLAB 中可以使用多种方法创建动画。第4章介绍了通过捕获多帧图像并连续播放的方法创建逐帧动画,本节介绍生成动画的其他方法。
    1.创建轨迹动画
    描绘质点运动轨迹的动画,称为轨迹动画。MATLAB提供了comet和comet3函数展现质点在二维平面和三维空间的运动轨迹。函数调用格式为

    comet(x,y,p)
    
    comet3(x,y,z,p)
    

    其中,x、y、z组成曲线数据点的坐标,用法与plot和plot3函数相同。参数p用于设置绘制的彗星轨迹线的彗长,彗长为p倍y向量的长度,p可为0~1之间的数,默认p为0.1。例如,以下程序用彗星运动轨迹演示曲线 的绘制过程。
    { x = s i n t + t c o s t y = c o s t − t s i n t z = t \begin{cases}x=sint+tcost \\ y=cost-tsint\\z=t \end{cases} x=sint+tcosty=costtsintz=t

    0 < = t < = 10 π 0<=t<=10\pi 0<=t<=10π

    t=linspace(0,10*pi,200);
    x=sin(t)+t.*cos(t);
    y=cos(t)-t.*sin(t);
    comet3(x,y,t)
    

    执行程序,动画中的一个画面如图9.10所示。
    2.创建线条动画
    线条动画是通过修改动画线条对象的属性后刷新显示,产生动画效果。创建线条动画包括以下3个步骤。
    (1)创建动画线条对象
    MATLAB提供animatedline函数创建动画线条对象,函数的调用格式为

    h=animatedline(ax,x,y,z,属性名1,属性值1,属性名2,属性值2,)
    

    其中,选项ax指定动画线条对象的父对象,默认为当前坐标轴。x、y、z定义动画线条对象的起始位置。动画线条对象的属性含义与用法(如线条颜色、线型、标记符号等)与 line 函数相同。
    [插图]
    图9.10 轨迹动画播放画面
    (2)添加数据点
    在动画线条对象上添加数据点使用addpoints函数,函数的调用格式为

    addpoints(h,x,y)
    
    addpoints(h,x,y,z)
    

    其中,h是动画线条对象句柄,x、y、z是要加入的数据点的坐标。为了不影响绘制速度,一般先计算出所有数据点的坐标,然后逐个添加。
    (3)更新显示
    使用“drawnow”或“drawnow limitrate”命令控制显示更新。在数据量大的情况下,“drawnow limitrate”命令的更新比“drawnow”命令更快。
    当动画中的所有数据点只有位置不同,而其他属性相同时,可以使用这种动画形式。为了控制坐标轴不会随图形的每一次刷新而变化,在创建动画之前,先设置坐标轴范围(XLim、YLim、ZLim),或将与之关联的模式属性(XLimMode、YLimMode、ZLimMode)改为手动模式。
    【例9.11】 绘制螺旋线 ,展示其绘制过程。 { x = s i n t + t c o s t y = c o s t − t s i n t z = t \begin{cases}x=sint+tcost \\ y=cost-tsint\\z=t \end{cases} x=sint+tcosty=costtsintz=t

    0 < = t < = 10 π 0<=t<=10\pi 0<=t<=10π
    程序如下:

    ha=axes('view',[-37.5,30]);
    ha.XLim=[-30,30];
    ha.YLim=[-30,30];
    ha.ZLim=[0,30];
    h=animatedline;
    %生成数据
    t=linspace(0,10*pi,200);
    x=sin(t)+t.*cos(t);
    y=cos(t)-t.*sin(t);
    %逐个添加数据点并绘制
    for k=1:length(t)
      addpoints(h,x(k),y(k),t(k));
      drawnow;
    end
    

    3.创建变换动画
    在 MATLAB 中,还可以通过变换对象沿着线条移动一组对象,产生动画效果。变换对象是一种特殊的图形对象,通过改变其属性可以控制图形对象的外观和行为。创建变换对象使用hgtransform函数,函数的调用方法为

    h=hgtransform(ax,属性名1,属性值1,属性名2,属性值2,)
    

    其中,选项ax用于指定变换对象的父对象,默认为当前坐标轴。
    创建变换对象后,通过将变换指定给变换对象的Matrix属性,将变换应用于图形对象。Matrix属性值是一个4×4的矩阵,用makehgtform函数创建。makehgtform函数简化了执行旋转、转换和缩放来构造矩阵的过程,函数的调用方法如下:

    M=makehgtform
    M=makehgtform('translate',tx, ty, tz)
    M=makehgtform('scale',s)
    M=makehgtform('scale',sx,sy,sz)
    M=makehgtform('xrotate',t)
    M=makehgtform('yrotate',t)
    M=makehgtform('zrotate',t)
    M=makehgtform('axisrotate',[ax,ay,az],t)
    

    第1种格式创建恒等变换矩阵;第2种格式创建沿x、y和z轴按tx、ty和tz进行转换的变换矩阵,平移图形对象;第3种格式创建等比例缩放的变换矩阵;第4种格式创建分别沿x、y和z轴按sx、sy和sz进行缩放的变换矩阵;第5、6、7种格式分别创建绕x、y、z轴方向旋转t弧度的变换矩阵;第8种格式创建绕轴[ax, ay, az]旋转t弧度的变换矩阵。
    【例9.12】 绘制螺旋线 ,并在其上添加一个’o’类数据标记, { x = s i n t + t c o s t y = c o s t − t s i n t z = t \begin{cases}x=sint+tcost \\ y=cost-tsint\\z=t \end{cases} x=sint+tcosty=costtsintz=t

    0 < = t < = 10 π 0<=t<=10\pi 0<=t<=10π标记从螺旋线始端移动到尾端,在移动的过程中显示曲线上各个数据点的坐标。
    程序如下:

    t=linspace(0,10*pi,200);
    x=sin(t)-t.*cos(t);
    y=cos(t)+t.*sin(t);
    plot3(x,y,t);  %绘制螺旋线
    ha=gca;
    h=hgtransform;  %在当前坐标轴创建变换图形对象
    plot3(h,x(1),y(1),t(1),'o');  % 在变换对象上添加标记符号
    ht=text(h,x(1),y(1),t(1),num2str(y(1)),...
      'VerticalAlignment','bottom','FontSize',14);  %在变换对象上添加文本
    for k=2:length(x)
       m=makehgtform('translate',x(k),y(k),t(k));
       h.Matrix=m;
       ht.String=['(', num2str(x(k)),',',num2str(y(k)),')'];
       drawnow;
    end
    

    9.4 光照和材质处理

    曲面对象的呈现效果除了与自身属性有关,还与光照和材质有关。

    9.4.1 光源对象

    不同光源从不同位置、以不同角度投射光到物体的表面,使图形表面微妙的差异体现得更清楚。
    1.创建光源对象
    MATLAB提供light函数创建光源对象,其调用格式为

    H=light(属性名1,属性值1,属性名2,属性值2,)
    

    其中,属性指定光源的特性。光源对象有如下3个重要属性。

    1. Color属性。设置光的颜色,值是RGB三元组或描述颜色的字符串,默认为白色。
    2. Style 属性。设置光源类型,可取值为’infinite’或’local’,分别表示无穷远光和近光,默认为无穷远。
    3. Position属性。指定光源位置,值是一个三元向量。光源对象的位置与Style属性有关,若Style属性为local,则设置的是光源的实际位置;若Style属性为infinite,则设置的是光线射过来的方向。

    2.设置光照模式
    利用“lighting”命令可以设置光照模式,“lighting”命令的格式为

    lighting 选项
    

    其中,选项有4种取值。'flat’选项使入射光均匀洒落在图形对象的每个面上,是默认选项;'gouraund’选项先对顶点颜色插补,再对顶点勾画的面上颜色进行插补,用于表现曲面;'phong’选项对顶点处的法线插值,再计算各个像素的反光,它生成的光照效果好,但更费时;'none’选项关闭所有光源。
    【例9.13】 绘制光照处理后的球面并观察不同光照模式下的效果。
    程序如下:

    [X,Y,Z]=sphere(30);
    axes('view',[-37.5,30],'Position',[0.05,0.1,0.4,0.85]);
    surface(X,Y,Z,'FaceColor','flat','EdgeColor','none');
    axes('view',[-37.5,30],'Position',[0.55,0.1,0.4,0.85]);
    surface(X,Y,Z,'FaceColor','flat','EdgeColor','none');
    lighting gouraund;
    light('Position',[1 -1 2],'Style','infinite')
    

    程序执行结果如图9.11所示。左图采用默认的光照模式,没有设置光源;右图采用’gouraund’光照模式,光源设置在远处。
    [插图]
    图9.11 光照处理效果

    9.4.2 材质处理

    图形对象的反射特性影响在光源照射下图形呈现的效果。图形对象的反射特性主要有5种。

    1. SpecularStrength 属性。用来控制对象表面镜面反射的强度,属性值取0~1的数,默认取0.9。
    2. DiffuseStrength属性。用来控制对象表面漫反射的强度,属性值取0~1的数,默认值取0.6。
    3. AmbientStrength属性。用于确定环境光的强度,属性值取0~1的数,默认值取0.3。
    4. SpecularExponent属性。用于控制镜面反射指数,值大于等于1,大多设置在5~20,默认值为10。
    5. BackFaceLighting属性。控制对象内表面和外表面的差别,取值为’unlit’、‘lit’和’reverselit’ (默认值)。

    【例9.14】 绘制具有不同镜面反射强度的球面,并观察反射特性对图形效果的影响。
    程序如下:

    [X,Y,Z]=sphere(30);
    axes('view',[-37.5,30],'Position',[0.05,0.1,0.4,0.85]);
    hs1=surface(X,Y,Z,'FaceColor','flat','EdgeColor','none');
    %光源位置在[1 -1 2],光照模式为phong
    light('Position',[1 -1 2]);
    lighting phong;
    hs1.SpecularStrength=0.1;
    axes('view',[-37.5,30],'Position',[0.55,0.1,0.4,0.85]);
    hs2=surface(X,Y,Z,'FaceColor','flat','EdgeColor','none');
    light('Position',[1 -1 2]);
    lighting phong;
    hs2.SpecularStrength=1
    

    程序的执行结果如图9.12所示。图9.12(a)的SpecularStrength属性值为0.1,表面暗,无光泽。图9.12(b)的SpecularStrength属性值为1,表面有光泽。
    [插图]
    图9.12 曲面不同的反射效果

    思考与实验

    一、思考题
    1.图形对象操作的基本思路是什么?
    2.简要描述下面程序最终的运行图形。

    x=-2*pi:pi/40:2*pi;
    y=sin(x);z=sin(2*x);
    H1=plot(x,y,x,z);
    set(H1(1),'color',[1,0,0],'linewidth',3);
    set(H1(2),'color',[0,0,1]);
    title('Handle Graphic Example');
    H1_text=get(gca,'Title');
    set(H1_text,'FontSize',26)
    

    3.说明下列程序段的功能。
    (1)

    h=plot(0:0.1:2*pi,sin(0:0.1:2*pi)); grid on;
    set(h,'LineWidth',5,'Color','red');
    set(gca,'GridLineStyle','-','Fontsize',16)
    

    (2)

    h=plot(0:0.1:2*pi,sin(0:0.1:2*pi));grid on;
    set(gca,'ytick',[-1 -0.5 0 0.5 1])
    set(gca,'yticklabel','a|b|c|d|e')
    set(gca,'Fontsize',20)
    

    (3)

    Hb=findobj(gca,'Color','b')
    

    二、实验题
    1.建立一个图形窗口,使之背景颜色为红色,并在窗口上保留原有的菜单项,而且在按下鼠标左键之后显示出“Left Button Pressed”字样。
    2.用line函数在同一个坐标轴绘制曲线
    { x = s i n t y = c o s t \begin{cases}x=sint \\ y=cost \end{cases} {x=sinty=cost
    { x = s i n 7 t y = c o s 7 t \begin{cases}x=sin7t \\ y=cos7t \end{cases} {x=sin7ty=cos7t
    ,t∈[0,2π]。要求:
    (1)第1个曲线标记数据点,线宽为2磅。
    (2)设置坐标轴标题为“篮筐”,x轴的标签刻度间隔为0.1。
    3.利用图形对象绘制下列曲线,要求先利用默认属性绘制曲线,然后通过图形句柄操作来改变曲线的颜色、线型和线宽,并利用文本对象给曲线添加文本标注。
    (1) y = e 0.2 x c o s x 2 , x ∈ [ 0 , 5 π ] y=e^{0.2x}cosx^2,x\in[0,5\pi] y=e0.2xcosx2,x[0,5π]
    (2) { x = t 2 y = 5 t 3 \begin{cases}x=t^2 \\ y=5t^3 \end{cases} {x=t2y=5t3
    4.利用图形对象绘制下列三维图形,要求与第3题相同。
    (1) { x = c o s t y = s i n t z = t \begin{cases}x=cost \\ y=sint\\z=t \end{cases} x=costy=sintz=t

    5.以任意位置子图形式绘制出正弦、余弦、正切和余切函数曲线。
    6.用patch函数绘制一个填充渐变色的正五边形。
    7.生成一个圆柱体,并进行光照处理。

    展开全文
  • 我们使用对象性,显着性和视觉相似性提示以自上而下的方式实现此目的,以共同定位整体前景对象的区域。 联合最大化视觉相似性并限制由其配置引起的几何变形,然后由源前景对象的子区域组成目标前景对象。 所得的合成...
  • 这段代码使用GPA进行人脸对齐:由Pulak Purkait开发。 有关算法的详细信息,请参见 如有任何疑问,请联系:电子邮件- 用法 数据集可以在以下位置找到 提取数据集: cat 300w.zip.* > 300w.zip; unzip 300w.zip 要...
  • imageWithNonSqrPix 模仿内置函数“image”的高级形式,但它显示具有非方形像素(圆盘、六边形、八边形、菱形)的图像对象。 您可以指定像素的形状和用于对齐它们的图案。 运行演示以更好地理解该概念。 我开发这段...
  • Matlab图形对象函数set和get

    千次阅读 2018-03-28 15:49:41
    Matlab中,所有对象都有属性来定义它们的特征,正是通过设定这些属性来修正图形显示的方式。尽管许多属性所有的对象都有,但与每一种对象类型(比如坐标轴,线,曲面)相关的属性列表都是独一无二的。对象属性可包括...
  • matlabGUI学习笔记1

    千次阅读 多人点赞 2019-07-26 17:06:39
    简要介绍了今后学习matlabGUI的计划,目的是通过阅读Matlab文档学会GUI编程
  • matlab自动代码生成变量同时边缘对齐和学习(SEAL) 于志定,刘未央,邹阳,陈峰,Srikumar Ramalingam,BVK Vijayakumar和Jan Kautz 执照 SEAL是根据MIT许可证发行的(有关详细信息,请参阅LICENSE文件)。 内容 ...
  • matlab对象都通用的属性

    千次阅读 2017-03-23 21:03:24
    控制框是图形对象,如图标、文本框和滚动条,它和菜单一起使用以建立用户图形界面,称之为窗口系统和计算机窗口管理器。MATLAB控制框,又称uicontrol,与窗口管理器所用的函数十分相似。它们是图形对象,可以放置在...
  • 我们数据库中图像中的对象与3D形状对齐,并且对齐为每个2D对象提供了准确的3D姿态注释和最接近的3D形状注释。 执照 ObjectNet3D是根据MIT许可证发布的(有关详细信息,请参阅LICENSE文件)。 引用ObjectNet3D 如果您...
  • text对象 (1)text(x坐标,y坐标,'string')在图形中指定位置(x,y)显示字符串string。(2)Editing有效值为...(3)HorizontalAlign 有效值为left/center/right决定Text对象中字符水平方向的对齐方式。(4)In...
  • 创建一个具有所需格式/结构的 MATLAB 对象。 cstruct 分析结构,可以从中提取字节,或将字节打包到结构中。 支持各种字节对齐和字节排序选项。 自从我写了这个,我发现它比我想象的更有用,因为我经常处理记录的...
  • saveppt2 建立在 saveppt 之上,包括许多新选项。 Saveppt2 特点: 将多个绘图保存到同一个 PowerPoint 幻灯片。 创建带标题和不带标题的幻灯片。... 禁用关闭 PowerPoint 演示文稿并返回 ActiveX 对象以进行进
  • MATLAB图形上的文字修饰 文字标注是图形修饰中的重要因素,它可以是用户在窗口上随意添加的字符说明,还可以是坐标轴对象中所用到的刻度标志等。字符对象的常用属性如下:Color属性: 字符的颜色。该属性的属性值是...
  • 对齐弯曲程序 通过使用先前计算的模型,可以通过最小化两组标记之间的距离来实现。 原点罗斯 负责计算两个机器人的初始关节姿态,并进行符号修改以使模型与现实世界中的一个相适应。 校准稳定性分析 该模块专门用于...
  • 用法: 下载文件,并在Matlab路径上具有“ zoom_plot.m”。 使用[zoom_utils] = zoom_plot(ax)在父轴ax内创建一组轴。 可以通过zoom_plot(ax,options)传递可选设置。 请参阅示例代码。 可以通过拖放来移动新轴...
  • GUIDE进行建立自己的界面,这点有点类似于VC++的操作,可以自行拖出控件实现对话框的建立关于matlab图形系统的结构:根对象下可以有一个或者多个图框窗口对象,图框窗口对象就是figure,figure除了包含图片中列举...
  • 卷积滤波器matlab代码方向刚度 该脚本开发用于在将多个剪切波弹性成像图像处理为3d表示的管道中使用。 刚度体积被计算到体素网格中,并被馈送到该算法中。 在此代码的原始目的中,将处理和比较同一对象的两次测量...
  • 通过TRIM算法在图像上进行初始三角剖分,然后使用梯度下降网格移动方法将三角形网格与图像进一步对齐,以使近似误差最小。 可以在以下位置找到此代码的Windows端口:。 学分 复光镜: 修剪:荣胜CP,GPT Choi,K。...
  • matlab的二维绘图

    万次阅读 多人点赞 2018-11-11 09:47:42
    matlab绘制图形的步骤为: 数据准备:产生自变量采样向量,计算相应的函数值向量。... 利用对象属性值或图形窗口工具栏设置线型、标记类型及其大小等 添加图形注释,例如图名,坐标名称,图例,文字说明等 ...
  • matlab求导代码-ah:啊

    2021-05-24 09:30:12
    为此,我们在一个内聚对象中提供了所有可能的结构分解。 两个对齐的层次结构之间的即将到来的距离度量 即将发布的对齐的子层次结构-(AsH)-这些是对齐的层次结构的派生,在以下内容中进行了介绍两个AsH表示之间的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,141
精华内容 856
关键字:

matlab对齐对象怎么用

matlab 订阅