繪製動態心形圖案::R語言繪製心形圖
原始方程源於此貼一樓:直通車
整理修改後: 被窩修改成這樣:
x<-seq(-1.1,1.1,length = 3000) rep<-30 y<-matrix(,3000,rep) #建立矩陣 yx<-matrix(,3000,rep) #建立矩陣 xx<-matrix(,3000,rep) #建立矩陣 c<-seq(0,1,length=rep) #立體效果 for (i in 1:rep) for (p in 1:3000){ y[p,i]<-(1-(x[p])^2)^(1/2)+((x[p])^2)^(1/4)+c[i] yx[p,i]<--(1-(x[p])^2)^(1/2)+((x[p])^2)^(1/4)+c[i] xx[,i]<-x} for (q in 2:15){ par(bg="pink") plot(main="中國(標題可更改)", c(rev(xx),xx),c(rev(y),yx),type='l',xlim = c(-1,1),xlab = "LOVE YOU",col.lab="red",font.lab=9,cex.lab=3,ylab = "",axes=F,col=q) Sys.sleep(1)} #Sys.sleep(1)動態效果
據說笛卡爾死前寄出的最後一封信,裡面只有短短的一行:r=a(1−sinθ)'>r=a(1−sinθ) r=a(1−sinθ) ,
這就是有名的心形函式。情人節將至,我用R語言的grid包畫了幾幅圖片,希望藉此平臺贈與我相戀五年的男友,也希望與各位統計愛好者分享快樂。
首先,我利用grid.lines()把轉化為直角座標系的(x, y)兩兩相連圍成心形,構建了一個heart function作為基本圖形。
x=16(sint)3y=13cost–5cos2t–2cos3t–cos4t'>xy =16(sint) 3 =13cost–5cos2t–2cos3t–cos4t x=16(sint)3y=13cost–5cos2t–2cos3t–cos4t
為了得到巢狀心形圖案,我使用了grid包建立了多個viewport。viewport是grid包的一個重要特色,此概念類似於photoshop的圖層。
建立一個viewport,我們需要設定它的位置、長度和寬度,下圖虛線實際上並不出現在R的output裡面,但這個矩形區域圖層會成為接下來畫圖的區域。構建了新的viewport以後,我們可以用pushViewport()命令鎖定該圖層,使之成為目標區域。我們也可以構建多個viewport,幾個viewport之間可以通過命令相互切換。
例如,在第一個圖層的基礎上在新建一個圖層,調整新圖層的長度與寬度使之稍微小於第一個圖層, 用pushViewport()鎖定新圖層,再呼叫一次心形函式,以此類推,迴圈建立多個巢狀圖層,並依次在各個圖層上畫心形函式,於是我們可以得到一系列巢狀的心形。 此外,grid包允許我們對圖形進行復制、旋轉、放縮等修改。要旋轉心形函式,我們並不需要修改函式本身,而是可以通過旋轉viewport的方式旋轉我們所需要繪製的圖形。設定新viewport,調整angle函式,那麼在此圖層下繪製的任何圖形將會被旋轉。
利用viewport對圖形進行修改,我們可以繪製各種有趣的圖形pattern,本人只是grid包的初學者,如有偏頗之處望多多包涵。最後,祝願大家情人節快樂! 以下是“情人節禮物”的程式碼:直通車