成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

SVG繪制餅狀圖

KoreyLee / 1605人閱讀

摘要:使其作為元素的子節(jié)點(diǎn)關(guān)于路徑中的的屬性的橢圓弧曲線目的是為了繪制餅狀圖參數(shù)一共有個參數(shù),以下按照順序依次解釋此時有一個起始位置,一個終止位置,一個軸,一個軸大弧小弧的問題是使用較長的弧線,還是較短的弧線。

SVG繪制餅狀圖
昨天學(xué)習(xí)了基本的SVG,下面是使用SVG繪制餅狀圖

創(chuàng)建SVG空間

創(chuàng)建SVG

需要一個document.createElementNS()方法  一個一個setAttribute()方法

編寫如下js,將會創(chuàng)建一個svg空間

    // 創(chuàng)建一個XML命名空間
    var svgns = "http://www.w3.org/2000/svg";

    // 創(chuàng)建一個SVG元素指定大小和坐標(biāo)
    var chart = document.createElementNS(svgns, "svg:svg");    // 創(chuàng)建在svgns命名空間里的svg元素
    // 設(shè)置節(jié)點(diǎn)的屬性
    chart.setAttribute("width", "100%");
    chart.setAttribute("width", "300px");
    // 設(shè)置視口大小
    chart.setAttribute("viewBox", "0 0 100% 300px");
關(guān)于document.createElementNS 和 document.getElement的區(qū)別 以及命名空間 命名空間

解決的問題:由于僅僅只有三個字母帶來的版本的混亂等等問題。
使用命名空間可以完整的區(qū)分一些不同。一些版本上帶來的不同

關(guān)于兩者

一個是xml一個是html
一個屬于操作xml的內(nèi)容,一個屬于操作html的內(nèi)容。

舉個栗子
document.createElementNS("p","edition");

創(chuàng)建了一個在p命名空間下的edition節(jié)點(diǎn)。
使其作為body元素的子節(jié)點(diǎn)

var e = document.createElementNS("p","edition");
var body = document.getElementsByTagName("body");
body.appendChild(e);
關(guān)于路徑path

SVG中的path的d屬性的橢圓弧曲線

目的是為了繪制餅狀圖
參數(shù)

一共有7個參數(shù),以下按照順序依次解釋

rx ry

    

此時有一個起始位置,一個終止位置,一個x軸,一個y軸

大弧小弧的問題

是使用較長的弧線,還是較短的弧線。

一直以為是兩個弧線相切暈
sweep-flag

順時針,還是逆時針,即選擇弧線,以后順時針旋轉(zhuǎn)還是逆時針旋轉(zhuǎn)。

計(jì)算弧度

有如下數(shù)據(jù)

項(xiàng)目 百分比
A 20%
B 40%
C 10%
D 30%

分為四項(xiàng),然后計(jì)算

如果數(shù)據(jù)為原始的楔,可以計(jì)算出相應(yīng)的百分比,

復(fù)習(xí)一下弧度 全部忘光了, 一個完整的圓的弧度為2π,半個圓為π。

計(jì)算各自需要的弧度。
20% * 2π 即可得出當(dāng)前的弧度,依次運(yùn)算出弧度即可
分別計(jì)算如下

項(xiàng)目 弧度數(shù)
A 0.4π
B 0.8π
C 0.2π
D 0.6π
計(jì)算圓弧的x和y

x使用sin y使用cos
計(jì)算分別的x和y,由于已經(jīng)擁有r需要確認(rèn)起點(diǎn)
其中r為10,需要加上圓心坐標(biāo)(20,20)

項(xiàng)目 x y
A 20 20-10=10
這里需要注意坐標(biāo)系的不同

此時


    

如圖

至于為什么要用sin和cos,是由于以12點(diǎn)鐘方向?yàn)闇?zhǔn)的。如果以極坐標(biāo)為準(zhǔn),即x軸正方向?yàn)闇?zhǔn)的,如下

接著計(jì)算結(jié)束坐標(biāo)
同樣的帶入計(jì)算

項(xiàng)目 x y
A 29 16

    

結(jié)束
加Z


    

設(shè)置畫筆寬度,填充顏色,線條顏色

stroke="#7a7a7a" fill="#c9d6d5" stroke-width="1"

如圖

完整如下


    

接著重復(fù)計(jì)算,應(yīng)該是使用js,將其封裝為一個函數(shù),輸入圓心坐標(biāo),傳入數(shù)組即可的。

上方最難的在于sin和cos的問題

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/98375.html

相關(guān)文章

  • echarts 與 highcharts

    摘要:渲染能力采用渲染除了對使用,一般來說,更適合繪制圖形元素?cái)?shù)量非常大這一般是由數(shù)據(jù)量大導(dǎo)致的圖表如熱力圖地理坐標(biāo)系或平行坐標(biāo)系上的大規(guī)模線圖或散點(diǎn)圖等,也利于實(shí)現(xiàn)某些視覺特效如交通圖。 一.簡介 echartsecharts是百度公司前端開發(fā)的一個圖表庫,2013年發(fā)布第一版,主要采用canvas畫圖,目前版本3.8.4;完全免費(fèi); highcharthighcharts是國外的一家公司...

    王笑朝 評論0 收藏0
  • JavaScript 編程精解 中文第三版 十七、在畫布上繪圖

    摘要:貝塞爾曲線方法可以繪制一種類似的曲線。不同的是貝塞爾曲線需要兩個控制點(diǎn)而不是一個,線段的每一個端點(diǎn)都需要一個控制點(diǎn)。下面是描述貝塞爾曲線的簡單示例。 來源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目原文:Drawing on Canvas 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《JavaScript 編程精解(第 2...

    habren 評論0 收藏0
  • 數(shù)據(jù)可視化實(shí)踐

    摘要:但如果數(shù)據(jù)可視化做的較弱,反而會帶來負(fù)面效果錯誤的表達(dá)往往會損害數(shù)據(jù)的傳播,完全曲解和誤導(dǎo)用戶,所以更需要我們多維的展現(xiàn)數(shù)據(jù),就不僅僅是單一層面,目前有多種第三方庫來實(shí)現(xiàn)數(shù)據(jù)的可視化等。數(shù)據(jù)可視化的具體實(shí)現(xiàn)這里基于兩種實(shí)現(xiàn)方式,一種一種。 數(shù)據(jù)可視化的目的其實(shí)就是直觀地展現(xiàn)數(shù)據(jù),例如讓花費(fèi)數(shù)小時甚至更久才能歸納的數(shù)據(jù)量,轉(zhuǎn)化成一眼就能讀懂的指標(biāo);通過加減乘除、各類公式權(quán)衡計(jì)算得到的兩組...

    PrototypeZ 評論0 收藏0
  • 怎樣用JavaScript和HTML5 Canvas繪制圖表

    摘要:餅狀圖將數(shù)據(jù)用切割成份的圓來展示。至于半徑,我們用寬度的一半與高度的一半的較小值,因?yàn)槲覀儾幌胱岋灎顖D超出。結(jié)果看起來如下這樣繪制圓環(huán)圖我們已經(jīng)看到如何創(chuàng)建餅狀圖。怎樣畫洞呢我們可以畫一個白色的圓在餅狀圖上。 showImg(https://segmentfault.com/img/bVObDh?w=850&h=362); 原文:https://code.tutsplus.com/zh...

    doodlewind 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<