伸缩变换的向量的加减乘除运算

我们知道矩陣乘法对应了一个变换,是把任意一个向量变成另一个方向或长度都大多不同的新向量在这个变换的过程中,原向量主要发生旋转、伸縮的变化如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值

实际上,上述的一段话既讲了矩阵变换特征值及特征向量的几何意义(图形变换)也讲了其物理含义物理的含义就是运动的图景:特征向量在一个矩阵的作用下作伸缩运动,伸缩的幅度由特征值确定特征值大于1,所有属于此特征值的特征向量身形暴长;特征值大于0小于1特征向量身形猛缩;特征值小于0,特征向量缩过了界反方向到0点那边去了。

关于特征值和特征向量这里請注意两个亮点。这两个亮点一个是线性不变量的含义二个是振动的谱含义。

如果存在某个或某些向量在A作用之后它只是伸长或者缩短,其位置仍停留在其原来张成的直线上那么称之为A的特征向量,伸长或者缩短的倍数称为对应特征向量的特征值公式表达为:

特殊哋,来看看对角矩阵

这是一个很简单的二项式)很容易看出

同理所有y轴上的向量都是特征向量,特征值为3

对角矩阵的线性变换的几何意义

这里不加证明地给出一个结论对角矩阵是对基向量进行拉升,也就是我们常说的坐标轴单位向量进行拉伸(收缩)从几何直观上来讲,只有坐标轴上的向量还在原来的方向上

特征向量所在直线上的向量都是特征向量。

所谓特征向量概念的亮点之一是不变量这里叫线性不变量。因为我们常讲线性变换啊线性变换,不就是把一根线(向量)变成另一根线(向量)线的变化的地方大多是方向和长度一块变。而一种名叫“特征向量”的向量特殊在矩阵作用下不变方姠只变长度。不变方向的特性就被称为线性不变量

(补正:有网友说不变量实际是特征空间的不变性,特征值再怎么变也不会离开特征涳间这个说法应是正解,因为这同时解释了复数矩阵大赞。)

除了线性不变量另外一个亮点是关于振动方面的。(省略一万字)

比如一个物理系统,其特性可以被一个矩阵所描述那么这个系统的物理特性就可以被这个矩阵的特征值所决定,各种鈈同的信号(向量)进入这个系统中后系统输出的信号(向量)就会发生相位滞后、放大、缩小等各种纷乱的变化。但只有特征信号(特征向量)被稳定的发生放大(或缩小)的变化如果把系统的输出端口接入输入端口,那么只有特征信号(特征向量)第二次被放大(戓缩小)了其他的信号如滞后的可能滞后也可能超前同时缩小,放大的可能被继续放大也可能被缩小同时滞后缩小的可能被继续缩小吔可能被放大同时滞后等。经过N次的循环后显然,乱七八糟的大量的向量群众们终不能成气候只有特征向量们,心往一处想劲往一處使,要么成功出人头地要么失败杀身成仁。因此我们就可以因此在时间域上观察输出就会得到一个或几个超级明显的特征信号出来(特征向量)。

特征向量之所以被称为“特征”因为它具有不变的特性

特征值、特征向量的性质

  • 只有方阵才有特征值和特征向量
  • 不同特征值对应的特征向量是线性无关的
  • 对于实对称矩阵或埃尔米特矩阵来说,不同特征值对应的特征向量必定正交(相互垂直)

相似—-《线性代数》同济版

相似矩阵的几何意义是同一个线性变换在不同的基下的表达形式

  • 相似矩阵有楿同的行列式
  • 相同的特征方程、特征值、相同的Jondan标准型、相同的特征多项式、相同的最小多项式

    这些统称为相似不变量,所以记住“相姒矩阵有若干相似不变量”特征值是最重要的相似不变量,利用这个相似不变量可以方便的得出上面所有的不变量

这些不变量的几何意義:

  • 相同行列式:相似矩阵的线性映射膨胀系数不变
  • 相同的秩:相似矩阵的线性映射,对空间的维数的影响一致
  • 相同的特征方程:相似矩阵的线性映射对向量的主变化方向和变化速度影响一致

相似矩阵用于简化问题:可以找到更简单的坐标系

如果在当前坐标系研究太过于复杂,我们就期望找到简单的坐标系在简单的坐标系下观察一些变换。

是在当前坐标系下的变换

其中P=P?1=?????22222222????

B是更简单的形式(对角矩阵),更为简单那么P表达的就是当前坐标系通过这个变换能箌达B所在的坐标系。

对角矩阵(diagonal matrix)是一个主对角线之外的元素皆为0的矩阵常写为diag(a1,a2,…,an) 对角矩阵可以认为是矩阵中最简单的一种,值得一提的是:对角线上的元素可以为 0 或其他值对角线上元素相等的对角矩阵称为数量矩阵;对角线上元素全为1的对角矩阵称为单位矩阵。对角矩阵的运算包括和、差运算、数乘运算、同阶对角阵的乘积运算且结果仍为对角阵。

矩阵对角化:对n阶矩阵A如果可以找到可逆矩阵P,使得P?1AP=就称为把方阵A对角化。

矩阵对角化的充要条件n阶矩阵有n个线性无关的特征向量

  1. 对角阵的主对角元素为A的特征徝
  2. 可逆矩阵P由A的n个线性无关的特征向量作列向量构成。

坏消息是:可对角化是有条件的,这里又用到了特征向量你只有找到A的n个线性無关的特征向量,才能将A顺利地对角化

好消息是:n阶实对称矩阵一定有n个线性无关的特征向量,所以实对称矩阵一定可以对角化不仅洳此还一定能找到正交矩阵CC?1AC=CTAC=

这真是一个好消息!!!

是在当前坐标系下的变换

其中P=P?1=?????22222222????

可知:3囷1是A的特征值,?????2222???? 是特征值3对应的特征向量

验算一下det(A?λI)=(2?λ)2?1=0求解,根为3和1带入后求解特征向量即可。

对角矩阵是最简单的矩阵

因此特征值与特征向量用于找矩阵的相似对角阵,非常有意义

  • 任哬一个方阵总存在约当标准型(线性变换的相关问题总是
  • 如果问题具有相似不变性,可以假定矩阵是约当标准型从而

特征究竟特征在何处它描述了原矩阵的哪些属性

为什么那些值被命名为特征值,为什麼那些向量被命名为特征向量

  1. 在相似变换中,这些东西不变而且其他不变性质可以通过特征值不变来推导;所以特征值是相似的这些矩阵的集合(这一类矩阵)的公共属性,它当然可以作为特征
  2. 重要:从几何意义上讲特征向量描述了矩阵对应的线性变换的主要变换方姠。线性变换对向量的作用是伸缩(新的长度)和旋转(新的方向)旋转会消减拉伸的作用,特征向量只有伸缩没有旋转它就代表了這个线性变换的主要方向;那么特征值就是描述该方向上的变换速度(倍数),所以把特征值排序从大到小的特征值及其特征向量能近姒地描述原矩阵的主变换方向和变换速度。

特征值分解是找最相似的矩阵

特征值分解是将一个矩阵分解为如丅形式: A=QQ?1

对于矩阵为高维的情况下,那么这个矩阵就是高维空间下的一个线性变换可以想象,这个变换也同样有很多的变换方向我们通过特征值分解得到的前N个特征向量,那么就对应了这个矩阵最主要的N个变化方向我们利用这前N个变化方向,就可以近似这个矩陣(变换)

总结一下,特征值分解可以得到特征值与特征向量特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什麼不过,特征值分解也有很多的局限比如说变换的矩阵必须是方阵。

比如说有这么一副512×512的图片(方阵才有特征徝):

是对角阵,对角线上是从大到小排列的特征值

我们在A=PΛP?1中只保留前面50个的特征值(也就是最大的50个,其实也只占了所有特征值嘚百分之十)其它的都填0,重新计算矩阵后恢复图像.

python求解特征值和特征向量

}

设一个矩阵不变为A那么由A经过┅组特征向量的作用,它会进行变换(旋转和缩放)而这个缩放的值被称为是特征值,描述增长或着减少的规模

其实矩阵的乘法就是對应了一个变换,在它的作用下可以把一个向量变成另外一个方向和长度都不同的新的向量.。然而在这个变换的过程中,原向量主要發生的就是旋转和伸缩的变化.

这种变换必然会有一组向量的存在被变换后的线性空间内的某个向量或者一组向量只发生了伸缩变换,而沒有产生旋转的效果那就是说在线性的变换下,它们所在直线上保持不变那这些向量就被称为是这个矩阵的特征销量,伸缩的比例就昰特征值

在实际应用中,所代表的具体事物被抽象为矩阵数据那么可能存在一组变换和特征值描述它未来发展的趋势(伸缩线性),叒或者根据后来的结果推导出导致它进行伸缩变换的向量(因素)

如果把矩阵实际抽象为一家公司的各种特征的发展,广告员工,产品营销,那么矩阵可以看做是一项经营活动就是说它在空间里是不变的活动,A = [, 200] 时间线上的该公司的广告员工,产品和营销所花的囚民币. 那么,现在有一场金融风暴来临公司所有的预算将会减少,这时候 可设定一组向量  a = [-1, -2, 1, -1] 那么经过这样的变换矩阵A所在的空间变化就會发生改变,它会直接崩溃到坐标轴第四象限所以它在所有特征维度上的计划都会变换,我们就可以说是向量影响了矩阵A的方向(发展决筞)和长度(营收变化).

那么会不会有一组向量应用在A后可以用特征值进行描述的?这组向量就被称为是特征向量那这个特征值就是反應具体伸缩变换的一个标准值。其实所有的公司都需要一个标准值来准确的表示再公司经营活动中发生的盈亏度量

那么为了应对这次风暴,所有为了公司应收影响降到最低就是要找到特征值至少不能为负数的特征向量(经营决策)。但是特征值与特征向量是不可能随意哽替的就是特征值与特征向量是互相影响的东西,会存在一种特征向量来描述不改变经营决策我会发生多大的损失(特征值决定着伸縮).

使用特征值可以将图像进行压缩处理,通过压缩后的图像颜色像素会损失部分

将方形图像进行转矩阵操作,比如255 * 255 每个像素点代表颜銫值然后求出矩阵的特征向量与特征值,保留特征值最大的50个并转成对角矩阵

为什么要使用最大值呢 因为特征值越大越能还原该像素點。越接近本来的颜色值特征值得到后,可以进行矩阵还原还原后的就是压缩后的图像了。

}
  • 我应该学习这个教程吗


  本敎程辅助开发人员理解可伸缩向量图形(SVG)背后的概念以将它们作为静态文档或动态生成的内容创建。

  XML 经验不是必需的但熟悉至少┅种标记语言(如 HTML)是有用的。有关基本的 XML 信息请参阅教程 Introduction to XML 。在本教程的结束部分的单个脚本编制示例中用到了 JavaScript不过相当简单。


  鈳伸缩向量图形(SVG)使得用文本指定出现在页面上的图像成为可能例如,传统图形需要指定矩形的每一个像素而 SVG 只要说明矩形存在,並指出它的大小、位置和其它属性即可

  它的好处有很多,包括轻松地从数据库信息生成图形(如图或图表)的能力以及向图形添加动画和交互性的能力。

  本教程演示了构建 SVG 文档必需的概念如基本形状、路径、文本和绘制模型,还有动画和脚本编制

  • 向量图形與光栅图形的比较


  在万维网历史的大部分时间里,浏览器显示的图形都是光栅格式的在光栅图像(如 GIF 或 JPEG 图像)中,文件包含图像中烸个像素的颜色值浏览器读取这些值并做出相应行动。它仅认识到单独的部分而没有整体概念。

  总的说来这一系统有其优势,唎如忠实再现摄影图像的能力但它在某些情形下显得不足。例如尽管浏览器能以不同大小显示一个图像,通常会产生锯齿边缘在这些地方,浏览器不得不为那些在原始图像中不存在的像素插入或猜测数值此外,光栅文件格式的二进制性质使得难以(尽管不是不可能)基于数据库信息动态地创建图像并且动画最多也仅限于“翻动书本”类型的动画,即快速连续地显示单独图像

  向量图形,通过指定为确定每个像素的值所需的指令而不是指定这些值本身克服了这些困难中的一部分。例如向量图形不再为一个直径一英寸的圆提供像素值,而是告诉浏览器创建一个直径一英寸的圆然后让浏览器(或插件)做其余事情。

  这消除了光栅图形的许多限制;使用向量图形浏览器只要知道它必须画一个圆。如果图像需要以正常大小的三倍来显示那么浏览器只要按正确的大小画圆而不必执行光栅图潒通常的插入法。类似地浏览器接收的指令可以更容易地与外部信息源(如应用程序和数据库)绑定,要对图像制作动画浏览器只要接收有关如何操纵属性(如半径或颜色)的指令即可。


  Web 上的第一个向量图像可能是虚拟现实标记语言(VRML)图像VRML 寻求将 HTML 的简易性带到圖像创建中来,然而尽管有一些示例给人以深刻的印象但它的本来目的是为了 3D 造型,而且它太过复杂以至于从未真正流行起来

  接著是 Macromedia Flash 的介入。Flash 电影是用 Macromedia 的 Flash 应用程序所创建它允许创建相当复杂的动画,并且将动画与声音和交互性绑定在一起因为 Flash 文件主要包含有关洳何创建图像的指令,所以它们比传统的 Web 电影小得多(例如 QuickTime 电影)— 而且它们可以缩放

  但是,Flash 文件仍然是二进制文件这使得动态創建它们比较困难(尽管不是不可能)。而且对从浏览器可以进行的脚本编制有所限制


  可伸缩向量图形通过使用 XML 定义图像、动画和茭互性解决了这些问题中的许多问题。浏览器读取(或者更准确地说浏览器的插件读取)这些基于文本的指令,然后执行这些指令例洳,一个简单的 SVG 矩形图像可能看起来如下:

  这个文档指示浏览器创建一个矩形并提供属性信息,如位置(x, y)、大小(height, width)、颜色(fill, stroke)囷线宽(stroke-width)(全部文档在基本 SVG 文档中讨论。)


  因为这一结构SVG 非常适合于动画和交互性。要更改图形元素的大小、位置或颜色脚夲只要调整相应的属性即可。

  事实上SVG 有为事件处理而专门设计的属性(很象 HTML),甚至还有特别适合于动画的元素例如,下面这一攵档创建一个在 8 秒期间沿一条特定路线来回移动并无限重复的棍状图形:

  因为这完全基于指令所以一个不是艺术家的人(象本教程嘚作者)即使不能创造真正的艺术,也可以创建基本的图形和动画


  SVG 基于文本的性质也允许轻松地“实时”创建图形,因为生成图形呮不过是将正确的值输出到页面而已例如,正象 Java servlet、ASP 页面或 CGI 脚本能从数据库输出数值一样SVG 可以输出图表或图。下面的图像显示了一个既含有 HTML 表中的纯文本数据又含有 SVG 版本数据的 HTML 页面:

  创建这个 SVG 的服务器端应用程序和创建 HTML 表的一样而且使用相同数据(缩放 1000 倍以适应页媔):

  这只是 SVG 能力的一个示例而已。SVG 使创建动态图像就象创建动态 HTML 一样简单另外,因为 SVG 基于 XML所以可以用可扩展样式表语言(XSL)变換轻松地创建它。


  从本质上来说SVG 文档是 XML 文档。这就是说 SVG 文档有某些基本属性:

*所以的标记都有开始标记和结束标记否则必须注明為空标记。空标记用反斜杠结束如<rect />。


  SVG 文档本身就非常有用但在目前(目前它仍处于开发阶段)将它们添加到 Web 页面会发挥它们最大嘚作用。将它们添加到 Web 页面也使得在浏览器中显示它们变得更容易;根据用户系统的文件名关联的设置情况有些浏览器会拒绝打开一个 *.svg 攵件,但显示作为 Web 页面一部分的 SVG 图像将不会有问题

  请特别注意 <object></object> 标记上的 height 和 width 属性。如果没有指定它们有些浏览器将不会正确显示图潒。此外浏览器在执行某些计算(最特别的是用 viewBox 缩放)会考虑这些值,因此如果没有正确地指定它们(如简单地用大的数值显示可能絀现的任何东西),它们可能会干扰图像的正确显示

  SVG 定义了六种基本形状,这些基本形状和路径(在路径是什么中讨论)一道,鈳以组合起来形成任何可能的图像每个基本形状都带有指定其位置和大小的属性。它们的颜色和轮廓分别由 fill 和 stroke 属性确定这些形状是:

圓(circle):显示一个圆心在指定点、半径为指定长度的标准的圆。


椭圆(ellipse):显示中心在指定点、长轴和短轴半径为指定长度的椭圆
矩形(rect):显示左上角在指定点并且高度和宽度为指定值的矩形(包括正方形)。也可以通过指定边角圆的 x 和 y 半径画成圆角矩形
线(line):显礻两个坐标之间的连线。
折线(polyline):显示顶点在指定点的一组线
多边形(polygon):类似于 polyline,但增加了从最末点到第一点的连线从而创建了┅个闭合形状。
下面的示例演示了这些形状:


  除了形状以外SVG 图像还可以包含文本。SVG 给予设计人员和开发人员对文本的大量控制可鉯获得很好的图形效果而不必借助失去真实纹理信息的图像(*.gif 或 *.jpg 图像甚至 Flash 电影常常这么做)。

  SVG 的文本和字体能力在以添加文本开始的攵本部分讨论而现在重要的是要理解所有在传统 HTML 页面中通过级联样式表(Cascading Style Sheet)可以获得的效果,也都可以在 SVG 图像内的文本元素中得到例洳:


  当组合多种不同元素时,正象 SVG 图像一样重要的是牢记各项在页面上的放置顺序,因为这关系到谁“在上面”出现在一个 HTML 页面仩,使用 z-index 属性来控制这一分层效果而对于 SVG 图像,则严格按顺序放置各项每个后继层放置在那些已放置层的上面。

  如果指定一个元素没有填充色(使用 fill="none")那么在它下面的各项会显现出来,就象您在这里看到的:

  请注意每个元素会覆盖在它之前出现的元素


  通常在 SVG 图像的构建中,各部分或者是可重用的或者不便于在图像主体内定义。在这些情况下通常方便的做法是在文档的定义部分内(莋为 <defs></defs> 元素的一部分)通过给这些部分指定以后可在图像主体中调用的标识来创建它们。

  例如在前面一页中显示的图像有两只眼睛,烸只眼睛边缘有一个眼镜镜片这个文档可以在定义部分中定义一个镜片,然后在文档中调用它两次而不是创建这个镜片两次(如下一頁所示)。类似地眼睛本身可以包含渐变(gradient),也应该定义这个渐变供以后引用(在渐变中有更详细的介绍。)

  • 将定义的项作为属性使用


  如前一页中定义的多边形和渐变预定义项的实际用法通常有两种形式。

  在这两种形式下定义的项都通过其本地 URL(或 URI)引鼡。象 HTML 页面一样id 属性创建了文档中的一个引用点。举例说来这意味着 URI #irisGradient 引用标识为 irisGradient 的文档部分(或渐变定义)。即:可以从圆元素的 fill 属性内部引用它

  请注意 url() 函数的使用。

  最终代码在本节最后一页显示请注意渐变现在用于眼睛的虹膜:

  • 将定义的项作为元素使用


  引用预定义项的第二种方法是通过用 <use/> 元素将它们链接到文档。例如:

  使用定义中提供的坐标将多边形放置在页面上

  在这里囿两个重要事项要强调。首先请注意 xlink 名称空间的使用。尽管大多数查看器没有它也将正确显示这一项但为了保持一致,xlink 名称空间应该茬 <svg></svg> 元素上定义如下一页所示。

  其次请注意 <use/>元素在以这种方式使用时成为了一个可以拥有自己坐标系统的容器。坐标系统在坐标系統和初始观察口(viewport) 一节中讨论不过您可以看到一个具体的示例:第二个镜片最初用初始坐标 (190, 50) 创建,也就是相对第一个镜片偏移 125 个像素而元素

  在其原始位置创建第二个镜片,因为它相对于它的“容器”偏移了 125 像素

  为兼顾可读性和方便性,将元素安排在一组中通常是个好办法针对这一目的,SVG 提供 <g></g> 元素它创建一个可以将元素置于其中的容器。这个容器可以用来标识元素或提供一个公共属性(本地定义的属性将会覆盖公共属性)。例如代码

  创建一个所有笔划都是 3 个像素宽的眼睛(因为没有元素定义笔划宽度)而除了外邊框笔划外所有笔划都是红色(因为椭圆定义了笔划颜色)。


  最终的文档显示各部分是如何添加的:

  请注意可重用元素也允许每佽使用不同的属性值正如上面虹膜的例子中的填充属性所示。


  整个教程到目前为止示例已经演示了围绕对象的笔划或线以及对象內部区域的填充。这些属性实际上还有子属性也可以设置子属性来创建不同的效果。这些属性包括:

fill:该属性指定用来填充对象内部区域的颜料大多数情况下,该属性只是一种颜色但它也可以是渐变或图案(会在图案中介绍)。这个值通常是关键字、颜色说明或指向預定义元素的 URI


fill-opacity:该属性指定元素的透明性。值的范围从完全透明(0)到完全不透明(1)
stroke:该属性指定元素外边框的外观。象 fill 一样它引用颜料,尽管通常将它指定为一种简单颜色
stroke-width:该属性指定笔划线的宽度。
stroke-linecap:该属性确定线末端的形状可取的值有粗端(缺省值)、圓和正方形。
stroke-linejoin:该属性确定对象各角的外观允许的值有直角(缺省值)、圆和斜角,它如示例中所示将尖角的边缘“剪掉”
stroke-dasharray:该属性昰一个整数系列(如 3、2、3、2、4、3、2 和 3),它允许对虚线中每一划的相对长度进行控制
您可以在下面看到这些属性的一些示例:


  颜色對于 SVG 图像是极其重要的。单个颜色可以直接使用它们的 RGB 值指定或者使用差不多 150 个颜色关键字中的一个来间接指定,该关键字也引用 RGB 值

  RGB 值在 0 到 255 数值范围内指定一种颜色的红、绿、蓝成分的相对亮度。例如:


  正象您在前面的示例中看到的渐变提供了将颜色混合在┅起的能力。渐变有两种对于每种情况,代码都指定沿着渐变向量的颜色“停止”或颜色点渐变到这些点就成为某种颜色。例如指萣红色在 0% 停止,白色在 50% 停止而蓝色在 100% 停止的渐变将逐渐由红色变为白色再变为蓝色白色在渐变向量的中心。

  可以推断或者直接指定漸变向量以线性渐变为例,假设它从要填充区域的左缘开始到右缘结束可以用 x1、y1、x2 和 y2 属性更改这一向量。也可以(依照)使用 gradientTransform 属性对這一向量进行变换

  以放射性渐变为例,渐变基于一个圆可以用 cx、cy 和 r 属性调整外部圆(渐变向量终止的地方)的圆心和半径。可以使用 fx 和 fy 属性调整焦点(渐变向量起始的地方)

  考虑下面这些线性和放射性渐变的示例:


  用图案填充对象在很多地方与用渐变填充类似。两种情况下都定义填充然后从填充属性内部调用它。

  定义图案与定义任何其它作为 SVG 图像一部分出现的对象相似它有位置、高度和宽度,通常还有一个或多个包含的对象位置是基于整个文档还是基于正在被填充的对象由 patternUnits 属性确定,该属性可以设置为 objectBoundingBox 或 userSpaceOnUse;这些属性分别设置基于对象和文档的坐标与渐变相似,可以变换图案(使用 patternTransform

  请考虑下面的示例:


  也许 SVG 最强大的功能之一就是给图潒添加了滤镜效果这些效果复制了昂贵的图形操作程序中的许多效果,如光照效果和高斯模糊对这些滤镜的完整讨论超出了本教程的范围,不过本页讨论了一些基本滤镜

  对 SVG 图像的滤镜操作包括创建一系列滤镜原语操作,该系列中每个原语操作都有自己的目的例洳,偏移滤镜按指定信息将源图像左移或右移以及上移或下移高斯模糊原语操作按要求对源图像进行模糊处理。

  源图像不必一定是實际的 SVG 图像例如,它可以是前一个原语操作的结果下面的代码将几个滤镜应用到前一页中显示的图案。

  首先偏移滤镜将原始椭圓及其图案的 alpha 通道作为源(使用 in 属性)。alpha 通道由与图像中每个非白色像素对应的黑色像素组成并且用 SourceAlpha 关键字指定。偏移原语操作完成处悝然后将结果输出到一个由 result 属性指定的缓冲区(本例中的缓冲区名为 offset )

  接下来,模糊原语操作接任它将 in 参数指定的 offset 缓冲区的内容莋为源。然后它将其结果输出到 result 属性指定的名为 blur 的缓冲区。

  这时滤镜仅由经过偏移和模糊的图像组成。如果滤镜操作到此为止那么页面上只出现模糊处理的图像。合并原语操作取得 blur 缓冲区的内容然后将它与原始源图形合并正如当 in 属性引用 SourceGraphic 关键字时所指定的那样。

  所有处理的结果是一幅具有阴影效果的原始图像:

  • 坐标系统和初始观察口(viewport)


  元素在整个教程中都是通过坐标定位的现在是該讨论这些坐标所适应的系统的时候了。

  当首次访问文档时用户代理(在大多数情况下,即浏览器)确定图像的观察口观察口是攵档实际可见的部分并且由一个坐标系统组成,该坐标系统以左上角的点(00)为原点,其正的 x 轴向右而正的 y 轴向下坐标系统中的一个潒素对应观察口中的一个像素。

  有几个操作可以创建新的坐标系统变换(接下来介绍)在被变换元素内部创建新的坐标系统,不过鈳以通过向文档添加另一个 <svg></svg> 元素来直接创建新的坐标系统考虑下面的示例:具有相同 x 和 y 属性的同一元素在不同的位置显示,这是因为第②个元素实际上属于另一个坐标系统它从第一个元素偏移 100 个像素:


  执行变换改变了元素所在的坐标系统,改变了它的外观变换可鉯用来以数种方式改变元素的外观:


scale(x, y):该变换更改元素的大小。可以分别控制 x 和 y 方向上缩放量但如果只指定一个值,那么它将用于两个方向
rotate(n):该变换按指定的角度旋转元素。
skewX(n)/ skewY(n) :这两种变换根据适当的轴按指定的像素数量偏斜元素
也可以使用矩阵指定变换,不过这超出叻本教程的范围

  变换是累积的,并且既可以指定为单个变换属性的一部分也可以指定为嵌套元素的一部分如下所示:

  在这个礻例中要注意的可能最重要的事就是正在变换的是实际坐标系统。对象本身实际上没有变换但它所在的坐标系统中的更改使它看起来发苼变化。考虑上面的“Transform!”文本现在正在沿 y 方向将它平移负 250 个像素,因此显而易见文本应该消失它会在观察口顶部以上显示。然而在平迻发生前坐标系统进行了 90 度旋转,所以负的 y 值实际上使文本向右移动了 250 个像素


  没有任何更改时,初始观察口指定一个大小其左仩方坐标为 0,0,右下方坐标为介于该大小值与 0,0 之间的像素数目但有时候期望的效果是按可用的大小(不管大小是多少)而不是按图像进行縮放。那就要用到 viewBox 属性了

  viewBox 属性重新映射观察口,它指定将在观察口左上角和右下角出现的新值请记住:当在 Web 页面上放置 SVG 图形时,<object></object> 標记的尺寸决定观察口的大小

  例如,如果眼睛和眼镜添加了 viewBox 属性如下所示:

  页面会在任何分配给该图像的框内显示图像,进荇适当的缩放因此下面的 Web 页面:

  以不同大小显示该图像三次:


  SVG 提供的预定义形状当然是有用的,但有时它们还不足以完成工作特别是在这两种情况下:第一,当图像需要曲线它不能由多边形或折线创建,第二当动画或文本需要沿页面上的特定形状前进时。

  这就需要路径了路径是一系列命令,用来创建作为图像一部分精确定义的形状该形状可以是开放的(如线)或闭合的(如多边形),并可以包含一条或多条线、曲线和线段

  最基本的路径由几条线段组成。例如:

  上述代码根据提供的指令生成一个简单的多邊形这些指令如下所示:


Z :通过将线画回到原始点闭合此形状。(更具体地说回到最近一条“move”命令所指定的点。)

  最终结果显礻如下:

  请注意这里显示的所有命令都是大写字母这说明这些坐标是相对于整个坐标系统的绝对坐标。使用小写字母命令则指明为楿对坐标因此命令 l 50 50 从当前点创建一条线至距当前点下方和右方各 50 像素的点,那一点可能在任何位置

  其它简单的线命令包括作水平線的 H (或 h)和作垂直线的 V (或 v)。


  路径命令可以创建三种类型的曲线:

  椭圆曲线是椭圆的一部分也称为弧。A (或 a)命令通过指萣起点、终点、x 和 y 轴半径、旋度和方向来创建它们如下所示。

  三次贝塞尔曲线由一个起点、一个终点和两个将曲线“拖”向自己的控制点定义C (或 c)命令(指定起点和终点)和 S (或 s)命令(假设这条曲线从最近的命令终止的地方继续)创建这些曲线。


二次贝塞尔曲線与其三次贝塞尔曲线类似不过仅包含一个控制点。Q(或 q)和 T(或 t)命令可以创建这些曲线

  下面的示例显示了一些样本弧,为了清楚除去了文本弧命令的格式如下:

  因此一个半径为 50 和 25,没有旋度, 使用椭圆长轴部分以及曲线的下段在距起点右边 50 个像素和下方 25 個像素处终止的弧将使用:

  一些变体如下所示:

  请注意所有的弧形都有相同的起点和终点,但形状不同

  贝塞尔曲线的形状甴起点和终点以及控制点的位置确定。这些命令的格式如下:

  对于 S 和 T 命令假设第一个控制点为前一条曲线的第二个控制点的反射。唎如:


  标记是对路径的自然补充它们是可以添加到线和路径起点、终点和顶点的元素。最常用的是将箭头添加到线的终点不过可鉯使用任何对象。

  这个标记本身由一个简单的三角形路径组成它由标记属性决定。已经设置了 viewBox以便不管框是什么,标记本身总是會填充整个框因为 markerUnits 值的缘故,框本身受应用标记线的大小影响markerUnits 属性也被设置为 userSpaceOnUse,这使标记使用常规坐标系统refX 和 refY 属性确定标记(该标記“附加”到它所标记的线)内的点。最后标记的方位设为 auto,使它的 Y 轴与线的切线垂直(为了理解这一方位,标记构建为指向 X 轴方向)

  请注意标记大小随笔划大小的改变而改变:

————————————————————


  SVG 的强大能力之一是它可以将文本控淛到标准 HTML 页面不可能有的程度,而无须求助图像或其它插件(后者会带来可访问性挑战)任何可以在形状或路径上执行的操作(如绘制戓滤镜)都可以在文本上执行。

  一个不足之处是 SVG 不执行自动换行如果文本比允许空间长,则简单地将它切断多数情况下,创建多荇文本需要多个文本元素

  可以使用 tspan 元素将文本元素分成几部分,允许每部分有各自的样式在 text 元素中,空格的处理与 HTML 类似;换行和囙车变成空格而多个空格压缩成单个空格,如下面的早期示例所示:


  实际上所有的属性(对于所有元素,不仅是文本)都可以用級联样式表与一个元素关联并且文本的所有 CSS 属性都在 SVG 图像中可用。

  可以直接用样式属性设计元素的样式或者引用样式表设计元素嘚样式。不应该解析样式表(因为它们偶尔包含会引起问题的字符)因此将它们置于 XML CDATA 节。


  在纯 HTML 中不可能具有的一个 SVG 能力是将文本沿蕗径排列要实现这一点,需创建一个链接到预定义的路径信息的 textPath 元素:

————————————


  即使在 SVG 产生以前动画和交互性巳经在 Web 上确立了牢固的地位。尽管实现可能较复杂但是概念很简单:更改对象属性值,对象本身看起来就会改变例如,给 x 坐标增加 50 个潒素对象就会向右移动 50 个像素。

  SVG 图像具有相同的概念但实现却简单得多,这是由于这些能力从开始就构建到语言中SVG 定义了专用於动画的五种元素:

animate:该元素指定一个特定属性(通过 attributeName 属性),其值在 dur 属性指定的时间内从指定为 from 属性的值变成指定为 to 属性的值repeatCount 属性指萣动画发生多少次。要使动画无限运行请将 repeatCount 的值设置为 indefinite。动画适用于包含它的元素因此下面的代码:

  创建一个正方形,其 stroke-width 逐渐增厚到 50 像素然后变回到 1 个像素,并再次开始循环

  animateMotion:该元素提供一种通过指定路径移动元素的简单方法。路径数据与路径元素的 d 属性楿同但用路径元素指定。也可以用 xlink:href 将它链接到 animateMotion 元素起点和终点由 from 和 to 属性确定,并且可以通过将 rotate 值设为 auto 来设置对象垂直对齐于路径(吔可以将 rotate 属性设为 auto-reverse 以将这个方位改变 180 度。或者可以给定一个特定角度)如动画和交互性所示:

  animateColor:该元素提供在一段时间内更改元素顏色的方法。例如要创建一个在 8 秒钟内由红色变成蓝色的圆:

  animateTransform:该元素在一段时间内执行变换。请记住这些变换影响整个坐标系統,因此简单地缩放一个矩形还会导致矩形位置的变化下面的示例不但缩放矩形,还逐渐将它返回到类似位置:

  set:剩下的这个元素鈳以很容易地设置一个元素在指定时间段内的特殊属性例如:

  当这些事件之一被触发,就可以将事件对象本身提供给脚本脚本反過来再用它确定哪个对象触发了该事件(也就是点击了什么对象)。然后脚本可以操纵那个对象的特性如它的属性。

  这一示例回到叻图案示例但在此例中,当用户点击椭圆时其填充由白色变为使用图案。


  可伸缩向量图形(SVG)图像是一种使用基于 XML 的文本信息创建图像的方法这些图像可以由简单的形状(如矩形、圆)或用数学方法指定的更复杂的路径组成。然后可以将这些图像嵌入在 Web 页面中SVG 查看器可以在那里解释它们。

  可以通过滤镜操纵属于 SVG 图像一部分的对象以允许复杂的成像效果并且为动态创建的图形和动画提供基礎。

  本教程对 SVG 作了介绍包括以下内容:


* 动画和脚本编制(简短介绍)


  可伸缩向量图形提供了如此之多的功能,因此要在一个教程中全部介绍它们是不可能的有关 SVG 及相关主题的更多信息,请参阅以下参考资料:


有关 SVG 功能和属性的完整列表请参阅万维网联盟 。
SVG 的恏处之一是可以在不同平台(包括手持设备)上创建图像的能力要了解用于这一方面可能的 SVG 子集,请在 中查看 W3C 对用于小型手持设备 SVG 版本嘚观点
Doug Tidwell 在他的教程 中讨论了如何从其它数据生成 SVG 图像,该教程是他对使用“可扩展样式表语言变换”来变换 XML 的研究的一部分
  试试能够轻松提供动态电子商务应用程序的新的 开发环境。
  Jackson West 撰写的 讨论了 SVG 使用中一些实践多于理论的方面
  Adobe 在 中收集了大量令人印象罙刻的教程和样本。
  从 W3C 建议书获取 那会为您节省一些时间。
}

我要回帖

更多关于 向量的加减乘除 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信