SVG <path> 元素A指令繪製弧線
<path>元素具有強大的繪圖能力,能夠繪製靈活複雜多樣的圖案。
之所以如此強大,是因為它具有多種多樣的圖形繪製命令,本文只介紹一下弧線繪製指令A。
A是arc的縮寫,翻譯成漢語具有"圓弧"的意思,瞭解命令縮寫的全稱在一定程度上有助於記憶。
關於<path>元素的基本用法和一些基本規則本文不做介紹,具體參閱SVG <path> 路徑元素一章節。
首先通過一段程式碼例項感受一下A指定的作用,程式碼如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> svg { border: 1px solid red; width:150px; height:100px; } </style> </head> <body> <svg xmlns="http://www.w3.org/2000/svg"> <path d="M40,20 A30,30 0 0,0 70,70" stroke="red" stroke-width="2" fill="none" /> </svg> </body> </html>
程式碼執行效果截圖如下:
上述程式碼中,通過A指令繪製了一段弧線,下面分步介紹一下此命令的具體用法。
此命令區分大小寫,也就是說A與a是不同的,大寫表示絕對座標,也就是命令中的座標都是相對於座標系的原點,小寫表示相對座標,也就是相對於上一個點的增量。
語法結構:
[HTML] 純文字檢視 複製程式碼A(a)rx ry x-axis-rotation large-arc-flag sweep-flag x y
命令解析如下:
(1).rx:規定圓弧在x軸方向的半徑吃尺寸。
(2).ry :規定元素在y軸方向的半徑尺寸,如果與rx相等則正圓圓弧,否則是橢圓圓弧。
(3).x-axis-rotation:規定圓弧的橫軸與x軸的夾角,正數表示順時針旋轉,反之表示逆時針。
(4).large-arc-flag:規定繪製大圓弧還是小圓弧,1表示繪製大角度圓弧,0表示繪製小角度圓弧。
(5).sweep-flag:規定繪製順時針方向繪製,還是逆時針方向繪製,1表示順時針,0表示逆時針。
(6).x:規定圓弧終點的x軸座標。
(7).y:規定圓弧終點的y軸座標。
上面對命令的細節進行了概念上的介紹,相信相當大的一部分朋友會感覺一頭霧水。
不用擔心,後面會結合程式碼例項繪製圖案對此命令各個細節進行詳細分析,理解起來更為輕鬆。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> svg { border: 1px solid red; width:150px; height:100px; } </style> </head> <body> <svg xmlns="http://www.w3.org/2000/svg"> <path d="M40,20 A30,30 0 0,0 70,70" stroke="red" stroke-width="2" fill="none" /> <path d="M40,20 A30,30 0 0,1 70,70" stroke="green" stroke-width="2" fill="none" /> <path d="M40,20 A30,30 0 1,0 70,70" stroke="blue" stroke-width="2" fill="none" /> <path d="M40,20 A30,30 0 1,1 70,70" stroke="yellow" stroke-width="2" fill="none" /> </svg> </body> </html>
程式碼執行效果截圖如下:
上述程式碼分析如下:
(1).上述程式碼繪製了四個不同顏色的圓弧。
(2).四個圓弧的半徑尺寸、圓弧繪製的起點座標和圓弧繪製的中點座標都是相同的。
(3).它們的不同點在於中間靠後的二個引數,也就是large-arc-flag和sweep-flag。
(4).圓弧半徑與繪製的起點與終點確定之後,你既可以選擇繪製較大一側的弧,也可以選擇繪製較小一側的弧,當然也可以順時針繪製,也可以逆時針繪製,當然圓弧也有可能兩側同樣大。
(5).紅色圓弧large-arc-flag和sweep-flag值都為0,表示繪製較小弧度和逆時針繪製,藍色圓弧同樣是逆時針繪製,但繪製的是較大的弧度,兩個一起對比是不是非常容易理解了。
(6).綠色圓弧是順時針繪製,繪製較小圓弧,黃色圓弧同樣是順時針繪製,繪製較大圓弧。
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> svg { margin:100px; width:450px; height:400px; } </style> </head> <body> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <path d="M10 315 L110 215 A30 50 0 0 1 162.55 162.45 L172.55 152.45 L315 10" stroke="black" fill="green" stroke-width="2" fill-opacity="0.5" /> <path d="M10 315 L110 215 A30 50 0 1 0 162.55 162.45 L172.55 152.45 L315 10" stroke="black" fill="green" stroke-width="2" fill-opacity="0.2" /> <path d="M10 315 L110 215 A30 50 30 0 1 162.55 162.45 L172.55 152.45 L315 10" stroke="black" fill="green" stroke-width="2" fill-opacity="0.5" /> <path d="M10 315 L110 215 A30 50 30 1 0 162.55 162.45 L172.55 152.45 L315 10" stroke="black" fill="green" stroke-width="2" fill-opacity="0.2" /> </svg> </body> </html>
程式碼執行效果截圖如下:
上面程式碼用於演示x-axis-rotation的功能,上述程式碼簡單分析如下:
(1).為了便於觀察我們繪製了四個圓弧,首先將後面兩個刪除,那麼就會剩下如下圖案:
兩個組合成一個整個橢圓,橢圓沒有任何旋轉效果,也就是沒有規定x-axis-rotation值為0。
可以看到橢圓豎直站立,黑色線條只是一條為了便於觀察的輔助線,沒有其他含義。
(2).下面再將後面兩個圖形繪製出來:
後面的圖案規定了x-axis-rotation屬性值,那麼就會進行旋轉。
旋轉點是圓弧繪製的起點座標,正數是順時針旋轉,負數為逆時針旋轉。
角度是圓弧的x軸(也叫橫軸)與使用者座標系x軸的夾角,可以看到整個橢圓進行了順時針旋轉。
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> svg { margin: 100px; width: 300px; height: 300px; } </style> </head> <body> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <path d="M50,50 A2,2 0 0,1 100,100" stroke="black" fill="green" stroke-width="2" fill-opacity="0.5" /> </svg> </body> </html>
程式碼執行效果截圖如下:
簡單程式碼分析如下:
(1).上述程式碼規定圓弧的半徑為2,但是實際繪製的圓的半徑明顯要大於2。
(2).是不是瀏覽器解析出現了bug,其實並不是,繪製的起點座標是(50,50),終點座標是(100,100),包含這兩個座標的圓弧再怎麼繪製,圓弧的半徑也是遠大於2的,所以瀏覽器就自作主張繪製一個半徑儘可能小的圓弧,也就是起點與終點連線起來恰好是圓的直徑,上述類似的情況一定要注意下。
相關文章
- SVG <path>元素C指令三次貝塞爾曲線SVG
- SVG <path>元素Q指令二次貝塞爾曲線SVG
- SVG 繪製直線SVG
- SVG <path> 路徑元素SVG
- SVG <polyline> 繪製折線SVG
- SVG <path> C 指令 三次貝塞爾曲線SVG
- SVG <path> Q指令 二次貝塞爾曲線SVG
- SVG繪製直線簡單介紹SVG
- svg畫弧SVG
- 使用canvas繪製圓弧動畫Canvas動畫
- SVG使用滑鼠點選繪製折線效果SVG
- 【Openxml】將Openxml的橢圓弧線arcTo轉為Svg的橢圓弧線XMLSVG
- SVG <rect> 繪製矩形SVG
- SVG <text>繪製文字SVG
- SVG繪製1px直線模糊問題SVG
- SVG <circle> 繪製圓形SVG
- SVG繪製餅狀圖SVG
- SVG 繪製圓角矩形SVG
- SVG <ellipse> 繪製橢圓SVG
- CSS & SVG 繪製寫作網格線的3種方式CSSSVG
- SVG基礎知識 Adobe Illustrator繪製SVGSVG
- Canvas&Paint 知識梳理(6) 繪製路線 Path 基本用法CanvasAI
- 【SVG】SVG的奪命利器——pathSVG
- svg繪製半圓程式碼例項SVG
- SVG拖動繪製矩形程式碼例項SVG
- SVG動態繪製不規則圖形SVG
- svg02——svg繪製基本圖形,瞭解常用的屬性SVG
- canvas 繪製線條Canvas
- canvas繪製直線Canvas
- SVG繪製矩形缺角問題解決方案SVG
- SVG <tspan>元素SVG
- SVG <switch>元素SVG
- SVG <image>元素SVG
- SVG defs元素SVG
- CSS、SVG、Canvas對特殊字型的繪製與匯出CSSSVGCanvas
- svg實現路徑自己動態繪製的功能SVG
- canvas 繪製雙線技巧Canvas
- PyQtGraph繪製折線圖QT