Open pfan123 opened 5 years ago
SVG 指可伸缩矢量图形 (Scalable Vector Graphics),是使用 XML 来描述二维图形和绘图程序的语言。在深入了解 SVG 过程中 , 若能很好的理解 SVG 坐标系统和坐标变换,有助于我们更好的使用 SVG 做相关项目。
SVG
(Scalable Vector Graphics)
XML
SVG 使用的坐标系统或者说网格系统,和Canvas用的差不多(所有计算机绘图都差不多)。这种坐标系统是:以页面的左上角为(0,0)坐标点,坐标以像素为单位,x轴正方向是向右,y轴正方向是向下。
<rect x="0" y="0" width="100" height="100" />
定义一个矩形,即从左上角开始,向右延展100px,向下延展100px,形成一个100*100大的矩形。
<svg>
width
height
viewBox = <min-x> <min-y> <width> <height>
<svg width="1024px" height="1024px" viewBox="0 0 80 80"> <rect x="10" y="20" width="40" height="40" style="stroke: black; fill: none"/> </svg>
preserveAspectRatio = "alignment [meet | slice]"
alignment :指定轴和位置,由一个x对齐方式和一个y对齐方式(min, mid, max)组合而成。默认为xMidYMid 。
alignment
(min, mid, max)
xMidYMid
meet :缩小图像以适配可用的空间。 slice :裁减图像不适合视口的部分。
SVG 元素可以通过缩放,移动,倾斜和旋转来变换。类似 HTML 元素使用 CSS transform 来变换,但也有些差异与复杂度,比如 SVG 中使用 <g> 标签创建分组也可以进行组嵌套,组内的标签继承属性,使用transform属性定义坐标变换,可以使组内的元素进行整体变换。
HTML
CSS transform
<g>
transform
tranform 属性用来对一个元素声明一个或多个变换。它输入一个带有顺序的变换定义列表的<transform-list>值,每个变换定义由空格或逗号隔开。
tranform
<transform-list>
<rect width="50" height="50" x="10" y="10" transform="translate(10, 20) scale(2)" style="stroke: black; fill: none" />
SVG 元素缩放,移动,倾斜和旋转的变换方式,其实原理都是通过 matrix(a b c d e f) 矩阵变换达到的自定义效果。可以通过一个简单线性方程获得变换后的新坐标 x2 和 y2:
matrix(a b c d e f)
x2 = ax + cy + e y2 = bx + dy + f
矩阵图:
| a c e | | b d f | | 0 0 1 |
matrix.js
线性代数拾遗(一 ):线性方程组、向量方程和矩阵方程
svg transfrom
SVG
指可伸缩矢量图形(Scalable Vector Graphics)
,是使用XML
来描述二维图形和绘图程序的语言。在深入了解SVG
过程中 , 若能很好的理解SVG
坐标系统和坐标变换,有助于我们更好的使用SVG
做相关项目。坐标系统
网格
SVG
使用的坐标系统或者说网格系统,和Canvas用的差不多(所有计算机绘图都差不多)。这种坐标系统是:以页面的左上角为(0,0)坐标点,坐标以像素为单位,x轴正方向是向右,y轴正方向是向下。viewport 、 viewBox、preserveAspectRatio属性
SVG
可见区域的大小,通常可以在<svg>
元素 上使用width
和height
属性确定视口的大小。viewBox = <min-x> <min-y> <width> <height>
, 分别代表想要叠加在视口上的用户坐标系统的最小x坐标、最小y坐标、宽度和高度。(可以理解为SVG
内元素定位的真实坐标系统)alignment
:指定轴和位置,由一个x对齐方式和一个y对齐方式(min, mid, max)
组合而成。默认为xMidYMid
。坐标变换
SVG
元素可以通过缩放,移动,倾斜和旋转来变换。类似HTML
元素使用CSS transform
来变换,但也有些差异与复杂度,比如SVG
中使用<g>
标签创建分组也可以进行组嵌套,组内的标签继承属性,使用transform
属性定义坐标变换,可以使组内的元素进行整体变换。transform属性
tranform
属性用来对一个元素声明一个或多个变换。它输入一个带有顺序的变换定义列表的<transform-list>
值,每个变换定义由空格或逗号隔开。变换矩阵
SVG
元素缩放,移动,倾斜和旋转的变换方式,其实原理都是通过matrix(a b c d e f)
矩阵变换达到的自定义效果。可以通过一个简单线性方程获得变换后的新坐标 x2 和 y2:矩阵图:
Other Resources
matrix.js
线性代数拾遗(一 ):线性方程组、向量方程和矩阵方程
svg transfrom