从svg到计算机图形学

基本图形

椭圆:ellipse,椭圆是两个同心圆.半径不一样

两个基本属性

圆心:cx,cy

两个圆的半径:rx,ry。

<ellipse cx="100" cy="200" rx="10" ry="20"/>

折线:polyline,多个点的坐标依次连接。

多边形:polygon,多个点的坐标一次连接,并把头尾连接。

高级图形

<path d="M0,0L10,20C30-10,4,20,100,100" stroke="red"/>

path命令:

M/m(x,y)+ 移动到当前位置
L/l(x,y)+ 从当前位置绘制线段到指定位置
H/h(x)+ 从当前位置绘制水平线到指定x坐标
V/v(y)+ 从当前位置绘制竖直线到指定y坐标
Z/z 闭合当前路径
C/c(x1,y1,x2,y2,x,y) 从当前位置绘制三次贝塞尔曲线到指定位置
S/s(x2,y2,x,y) 从当前位置光滑绘制三次贝塞尔曲线到指定位置
Q/q(x1,y1,x,y) 从当前位置绘制二次贝塞尔曲线到指定位置
T/t(x,y) 从当前位置光滑绘制二次贝塞尔曲线到指定位置
A/a(rx,ry,xr,laf,sf,xy) 从当前位置绘制弧线到指定位置

 弧线:

A(rx,ry,xr,laf,sf,x,y)

rx radius-x 弧线所在椭圆的x半轴长
ry radius-y 弧线所在椭圆的y半轴长
xr xAxis-rotation 弧线所在椭圆的长轴角度
laf large-arc-flag 是否选择弧长较长的那一段
sf sweep-flag 是否选择逆时针方向的那一段
x,y   弧线的终点位置

 贝塞尔曲线:

二次贝塞尔

三次贝塞尔

 path参数属性:

  • 区分大小写,大写表示坐标参数的绝对位置,小写表示相对位置。
  • 最后的参数表示最终要到达的 位置
  • 上一个命令结束的位置就是下一个命令开始的位置。
  • 命令可以重复,参数表示重复执行同一条命令

svg视野和视界和视窗

<svg></svg>

在svg中世界是无穷大的。

视窗:浏览器开辟出的一个渲染区域。浏览器中的svg的窗口大小。width和height控制视窗大小

视野:viewbox,控制svg内容显示多大。当svg内容显示与浏览器渲染区域大小不一致时,要用preserveAspectRatio控制渲染的方式。是缩放,还是平铺,还是上对齐还是下对齐等等。

坐标系统

笛卡尔坐标系.在浏览器中。Y轴是朝下的,X轴朝右。

圆点在浏览器左上角。

transform="translate(50,50)"

四个坐标系

用户坐标系User Coordinate:世界的坐标系。原始坐标系。

自身坐标系Current Coordinate:本元素或者分组独立与生俱来的的。比如宽高。就是基于左上角数。或者圆是基于圆点。

前驱坐标系User Coordinate: 父容器的坐标系。基于父容器内的x40,y250.用transform="translate(40,250)"。相当于本坐标是在父坐标的基础上进行了transform后的坐标。

<svg>

</svg>

参考坐标系: 使用其他坐标系来考究自身的情况时的坐标。比如,相对某个元素的左边50,下边150.用于对齐等操作。

坐标变换

用transform属性可以做前驱坐标系到自身坐标系的线性变换。

变换方法有:
平移:translate

缩放:scala,scale(<x> [<y>])。

旋转:rotate,旋转N度,rotate(<a> [<x> <y>])

向X斜切:skewX(<a>)

向Y斜切skewY(<a>)

矩阵变换(线性变换):matrix(<a> <b> <c> <d> <e> <f>)。对坐标系进行线性代数计算。

技巧

设置viewbox坐标系时,坐标设置为.5小数点,浏览器渲染会比较锐利。

分组与引用

<g id="xxx"></g>

把多个元素打包成一个组,方便进行重复操作,对分组设置的属性会对组内所有元素生效

<use xlink:href="#xxx" x="10" y="10"></use>

<defs></defs>相当于模板,在里面定义的元素需要被use才能使用,浏览器不会直接渲染。

<symbol></symbol>

<image></image>

颜色渐变与笔刷

颜色,渐变,笔刷,都是用来填充的。使用时先定义一个渐变,然后在要应用的地方用fill="url(#id)"来引用。

颜色

HSL:颜色,饱和度,亮度。

格式:hsl(h,s%,l%)

取值范围

h:[0,359],色环图里面的位置

s,l:[0,100]

 hsla与rgba,多了一个透明度参数。

渐变

线性渐变:从一个端点向另外一个端点渐变。linearGradient和stop,有两个坐标x1,y2起点,x2,y2终点。stop用来定义哪个点的颜色等于stop-color的颜色。

<defs>

<linearGradient id="tower" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#999"/>
<stop offset="1" stop-color="#333"/>
</linearGradient>
 
径向渐变:从圆心向外渐变。radialGradient和stop。
<radialGradient id="light" cx="0.5" cy="0.5" r="0.5">
<stop offset="0" stop-color="rgba(255,255,255,0.8)"/>
<stop offset="1" stop-color="rgba(255,255,255,0)"/>
</radialGradient>
</defs>
 

笔刷

pattern笔刷用来定义纹理。会不断的重复图形。

剪切与蒙版

剪切:

clipPath可以定义一个剪切板。形状由里面定义的元素形状来决定。

然后在要进行剪切的元素上用clip-path="url(#light-clip)"引用。就会从原来的图形上留下clipPath定义的形状

<clipPath id="light-clip">
<polygon points="0,0 -400,-30 -400,30" fill="rgba(255,255,255,0.5)"/>>
</clipPath>
<ellipse cx="0" cy="0" rx="700" ry="600" clip-path="url(#light-clip)" fill="rgba(255,255,255,0.5)" transform="translate(500,100)"/>

蒙版:

蒙版是用于显示或隐藏用的。

<mask id="moon-mask">
<circle cx="800" cy="100" r="100" fill="yellow"/>
<circle cx="800" cy="150" r="100" fill="black"/>
</mask>
<circle cx="800" cy="100" r="100" fill="yellow" mask="url(#moon-mask)"/>

 

原文地址:https://www.cnblogs.com/-outman/p/12208985.html