第一講我們講了畫圓的基本原理积暖,只簡(jiǎn)單劃了一個(gè)圓藤为,這是不夠的,像跑馬燈圖的基礎(chǔ)都是同心圓夺刑,那么同心圓怎么畫呢缅疟?
復(fù)習(xí)一下第一講:
圓上每個(gè)點(diǎn)的X坐標(biāo)=a + sin(2*PI / 360*角度) * r ;Y坐標(biāo)=b + cos(2*PI / 360*角度) * r
其實(shí)同心圓只有r遍愿,也就是半徑不一樣存淫,其他都一樣,這樣就好辦了错览。
其實(shí)我們只需要構(gòu)造一張表纫雁,字段就是兩個(gè) point和R,加入我們要畫一個(gè)半徑為1和一個(gè)半徑為2的同心圓倾哺,根據(jù)上一講的思路轧邪,那么我們就需要做720行,前360行point是1-360羞海,R是1忌愚,后360行point是1-360,R是2却邓,然后用Tableau引入數(shù)據(jù)計(jì)算sin和cos硕糊,這樣當(dāng)然沒有問題,但是很麻煩腊徙,如果同心圓更多就更麻煩了简十。
我們選用另一種方案
先構(gòu)造一張point表
再做一張circle表(這次一次畫五個(gè)同心圓)
引入Tableau,用內(nèi)連接連接兩張表撬腾,就會(huì)以笛卡爾積的形式構(gòu)造好我們要的表5*361=1805行(因?yàn)?度和360度重合了螟蝙,為了能讓圓封閉上,大家可以自己試試0-359度畫完了是什么樣)
構(gòu)造出的表就是這個(gè)樣子
下面就是添加計(jì)算字段
拖入sin和cos拖入行列功能區(qū)民傻,取消聚合胰默,默認(rèn)就是5個(gè)同心圓,但是如果你放大了漓踢,其實(shí)還是圓點(diǎn)牵署,還需要用point作為路徑把圓點(diǎn)串聯(lián)起來。
把point拖入路徑
靠喧半,什么鬼奴迅?為什么?
其實(shí)如果你點(diǎn)擊圖表右鍵挺据,查看數(shù)據(jù)半沽,point每個(gè)值都是5個(gè),作為路徑point是按順序連接的吴菠,所以就會(huì)連接5次0和然后連接5次1者填,以此類推,當(dāng)然不是我們想要的做葵。
我們需要把5個(gè)圓區(qū)分開占哟,point作為路徑才能依次連接每個(gè)圓內(nèi)的0-360個(gè)點(diǎn),所以拖入circle字段(也可以用R酿矢,但要轉(zhuǎn)換成維度榨乎,離散型)到詳細(xì)或者顏色都可以,這樣才能把5個(gè)圓分區(qū)(大家可以再點(diǎn)擊右鍵查看數(shù)據(jù)瘫筐,看看數(shù)據(jù)是什么樣的)
自此蜜暑,同心圓就畫好了。與一個(gè)圓的區(qū)別就是point路徑要分區(qū)策肝,這是重點(diǎn)要理解的肛捍,我在研究這個(gè)問題的時(shí)候就卡這里很久隐绵。
另外還有用數(shù)據(jù)桶來做的,也是為了構(gòu)造一個(gè)笛卡爾積的表拙毫,只不過構(gòu)造是在生成圖表時(shí)完成依许,而我們用的連接表是在數(shù)據(jù)處理階段,至于哪種效率更高缀蹄,我沒研究過峭跳。鏈接表的形式我覺得更直接更好理解,如果后續(xù)畫跑馬燈等圖表缺前,根據(jù)數(shù)據(jù)判斷比例之類的復(fù)雜表計(jì)算時(shí)候蛀醉,數(shù)據(jù)桶的方式我個(gè)人感覺會(huì)麻煩一點(diǎn)。如果有時(shí)間大家可以研究一下衅码。
另外拯刁,出個(gè)題,上面的表畫同心的半圓怎么畫呢肆良?
小禮物走一走筛璧,來簡(jiǎn)書關(guān)注我
作者:掃地sir
鏈接:http://www.reibang.com/p/c0d1200aa81f
來源:簡(jiǎn)書
簡(jiǎn)書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處惹恃。