原始方程源于此贴一楼:直通车
整理修改后:
被窝修改成这样:
x<-seq(-1.1,1.1,length = 3000)rep<-30y<-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包的初学者,如有偏颇之处望多多包涵。最后,祝愿大家情人节快乐!
以下是“情人节礼物”的代码:直通车