function drawcircle(context, radius)
使用canvas畫圖你需要上面的**,d3.path可以讓你在svg上使用類似**畫圖。
var context = d3.path();
drawcircle(context, 40);
pathelement.setattribute("d", context.tostring());
原始碼如下,講svg的操作轉化為類似canvas,主要是用到一些向量運算。
var pi = math.pi,
tau = 2 * pi,
epsilon = 1e-6,
tauepsilon = tau - epsilon;
function path()
function path()
path.prototype = path.prototype = ,
closepath: function()
},lineto: function(x, y) ,
quadraticcurveto: function(x1, y1, x, y) ,
beziercurveto: function(x1, y1, x2, y2, x, y) ,
arcto: function(x1, y1, x2, y2, r)
// or, is (x1,y1) coincident with (x0,y0)? do nothing.
else if (!(l01_2 > epsilon));
// or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
// equivalently, is (x1,y1) coincident with (x2,y2)?
// or, is the radius zero? line to (x1,y1).
//判斷兩個向量是否共線?
else if (!(math.abs(y01 * x21 - y21 * x01) > epsilon) || !r)
// otherwise, draw an arc!
else
this._ += "a" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);}},
arc: function(x, y, r, a0, a1, ccw)
// or, is (x0,y0) not coincident with the previous point? line to (x0,y0).
else if (math.abs(this._x1 - x0) > epsilon || math.abs(this._y1 - y0) > epsilon)
// is this arc empty? we』re done.
if (!r) return;
// does the angle go the wrong way? flip the direction.
if (da < 0) da = da % tau + tau;
// is this a complete circle? draw two arcs to complete the circle.
if (da > tauepsilon)
// is this arc non-empty? draw an arc!
else if (da > epsilon)
},rect: function(x, y, w, h) ,
tostring: function()
};export default path;
深入學習D3JS Stacks
stack用來生成多型別可重疊的資料的二維陣列。適用於如下圖表型別 stack生成器不會直接產生形狀,它可以產生位置資訊,然後傳入area生成器或者直接使用。根據輸入的資料生成乙個stack,返回乙個表示每乙個系列的陣列,引數傳播到訪問器。用法如下 var data var stack d3.sta...
FlashCS3值得深入學習
接觸flashcs3是很偶然的事情,為了幫同事製作乙個漂亮的課件,使用了flash動畫技術。簡單的動畫技術,能夠實現的東西還是太過於簡單,很多的內容向乎是ppt的翻版,只不過實現的方法變了,動畫的元素多了,介面和控制都稍好了一點。要想製作好的作品,還是需要更深入的技術。乙個同事要我幫忙製作乙個動態顯...
深入學習STL系列(3) list
list list是一種雙向鍊錶,不同於vector的連續記憶體儲存,它在記憶體中以節點的形式存在,每個節點都存著指向上下節點的指標。下面我們將以儲存int型元素的list為例,仔細講解如何使用list。建立list list int il 方式1,構建乙個空的容器物件 list int ivl 2...