1. 程式人生 > 其它 >繪製動態心形圖案::R語言繪製心形圖

繪製動態心形圖案::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&#x2212;sin&#x03B8;)'>r=a(1−sinθ) r=a(1−sinθ) ,這就是有名的心形函式。情人節將至,我用R語言的grid包畫了幾幅圖片,希望藉此平臺贈與我相戀五年的男友,也希望與各位統計愛好者分享快樂。

首先,我利用grid.lines()把轉化為直角座標系的(x, y)兩兩相連圍成心形,構建了一個heart function作為基本圖形。

x=16(sint)3y=13cost&#x2013;5cos2t&#x2013;2cos3t&#x2013;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包的初學者,如有偏頗之處望多多包涵。最後,祝願大家情人節快樂! 以下是“情人節禮物”的程式碼:直通車