绘制圆弧指令:A rx ry x-axis-rotation large-arc-flag sweep-flag x y 用圆弧连接2个点比较复杂,情况也很多,所以这个命令有7个参数,分别控制曲线的的各个属性。下面解释一下数值的含义: rx,ry 是弧的半长轴、半短轴长度 x-axis-rotation 是此段弧所在的x轴与水平方向的夹角,即x轴的逆时针旋转角度,负数代表顺时针转动的角度。 large-arc-flag 为1 表示大角度弧线,0 代表小角度弧线。 sweep-flag 为1代表从起点到终点弧线绕中心顺时针方向,0 代表逆时针方向。 x,y 是弧终端坐标。 前两个参数和后两个参数就不多说了,很简单;下面就说说中间的3个参数: x-axis-rotation代表旋转的角度,体会下面例子中圆弧的不同:
复制代码 代码如下: <svg> <path d="M10 315
L 110 215
A 30 50 0 0 1 162.55 162.45
L 172.55 152.45
A 30 50 -45 0 1 215.1 109.9
L 315 10" stroke="black" fill="green" stroke-width="2" fill-opacity="0.5"/> </svg>
上面的HTML画出下面的图形:
从图中可以看到椭圆旋转参数的不同导致绘制的圆弧方向不同,当然这个参数对正圆来说没有影响。
large-arc-flag和sweep-flag控制了圆弧的大小和走向,体会下面例子中圆弧的不同:
复制代码 代码如下: <svg> <path d="M80 80
A 45 45, 0, 0, 0, 125 125
L 125 80 Z" fill="green"/> <path d="M230 80
A 45 45, 0, 1, 0, 275 125
L 275 80 Z" fill="red"/> <path d="M80 230
A 45 45, 0, 0, 1, 125 275
L 125 230 Z" fill="purple"/> <path d="M230 230
A 45 45, 0, 1, 1, 275 275
L 275 230 Z" fill="blue"/> </svg>
这个HTML绘制了下面的几幅图:
从上面可以看出,这几个参数其实是唯一确定一段圆弧需要的参数。这里也看到,SVG中的圆弧比canvas中的复杂一些。
绘制三次贝塞尔曲线指令:C x1 y1, x2 y2, x y
三次贝塞尔曲线有两个控制点,就是(x1,y1)和(x2,y2),最后面(x,y)代表曲线的终点。体会下面的例子:
复制代码 代码如下: <svg> <path d="M10 10 C 20 20, 40 20, 50 10" stroke="black" fill="transparent"/> <path d="M70 10 C 70 20, 120 20, 120 10" stroke="black" fill="transparent"/> <path d="M130 10 C 120 20, 180 20, 170 10" stroke="black" fill="transparent"/> <path d="M10 60 C 20 80, 40 80, 50 60" stroke="black" fill="transparent"/> <path d="M70 60 C 70 80, 110 80, 110 60" stroke="black" fill="transparent"/> <path d="M130 60 C 120 80, 180 80, 170 60" stroke="black" fill="transparent"/> <path d="M10 110 C 20 140, 40 140, 50 110" stroke="black" fill="transparent"/> <path d="M70 110 C 70 140, 110 140, 110 110" stroke="black" fill="transparent"/> <path d="M130 110 C 120 140, 180 140, 170 110" stroke="black" fill="transparent"/> </svg>
这个HTML片段绘制了下面的图形:
从上面我们可以看到,控制点控制了曲线的弧度。
特殊版本的三次贝塞尔曲线:S x2 y2, x y
很多时候,为了绘制平滑的曲线,需要多次连续绘制曲线。这个时候,为了平滑过渡,常常第二个曲线的控制点是第一个曲线控制点在曲线另外一边的映射点。这个时候可以使用这个简化版本。这里要注意的是,如果S指令前面没有其他的S指令或C指令,这个时候会认为两个控制点是一样的,退化成二次贝塞尔曲线的样子;如果S指令是用在另外一个S指令或者C指令后面,这个时候后面这个S指令的第一个控制点会默认设置为前面的这个曲线的第二个控制点的一个映射点,体会一下:
复制代码 代码如下: <svg> <path d="M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80" stroke="black" fill="transparent"/> </svg>
这个HTML片段绘制如下图形:
上面的S指令只有第二个控制点,第一个控制点采用了前面的曲线指令的第二个控制点的一个映射点。
绘制二次贝塞尔曲线指令:Q x1 y1, x y , T x y (特殊版本的二次贝塞尔曲线) 二次贝塞尔曲线只有一个控制点(x1,y1),通常如下图所示:
如果是连续的绘制曲线,同样可以使用简化版本T。同样的,只有T前面是Q或者T指令的时候,后面的T指令的控制点会默认设置为前面的曲线的控制点的映射点,体会一下:
复制代码 代码如下: <svg> <path d="M10 80 Q 52.5 10, 95 80 T 180 80" stroke="black" fill="transparent"/> </svg>
这个HTML片段绘制如下图形:
(编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|