換了新工作,也確定了我未來(lái)數(shù)據(jù)可視化的發(fā)展方向。新年第一篇博客,又逢春運(yùn),這篇技術(shù)文章就來(lái)交給大家如何做一個(gè)酷炫的遷徙圖(支持移動(dòng)哦)。(求star 代碼點(diǎn)這里)
遷徙圖的制作思路分為靜態(tài)的元素和變換的動(dòng)畫(huà)。其中動(dòng)畫(huà)是圍繞著靜態(tài)的元素變換,所以我們首要的任務(wù)就是如何繪制靜態(tài)的元素。
仔細(xì)看一下,靜態(tài)的元素分為弧線(Arc)、弧線端點(diǎn)的箭頭(Marker),動(dòng)畫(huà)部分主要是弧線終點(diǎn)向脈沖波一樣的圓(Pulse),以及像流星一樣的動(dòng)態(tài)小箭頭和弧線的光暈,這兩個(gè)我們放在一起成為Spark。我們可以看到Spark主要在弧線上運(yùn)動(dòng),如果你仔細(xì)觀察一下會(huì)發(fā)現(xiàn)終點(diǎn)處點(diǎn)頭的指向也是朝著終點(diǎn)處的切線方向,所以我們把主要的任務(wù)放在如何根據(jù)兩個(gè)點(diǎn)繪制一段弧線。
我們要繪制這段弧線就要知道圓心和半徑,而數(shù)學(xué)定理告訴我們的是三點(diǎn)定圓,過(guò)兩個(gè)點(diǎn)的圓有無(wú)數(shù)個(gè),所以我們只能找一個(gè)比較合適的圓。
所以現(xiàn)在的問(wèn)題變成了已知兩點(diǎn)pointF和pointT,求一個(gè)合適的圓心pointC (xc, yc);
根據(jù)pointF和pointT所以我們能夠確定一條直線,他的斜率 kt =(yt - yf)/ (xt - xf);