欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

绘制动态心形图案::R语言绘制心形图

程序员文章站 2022-07-12 22:36:35
...

原始方程源于此贴一楼:直通车

整理修改后:
被窝修改成这样:

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语言绘制心形图

据说笛卡尔死前寄出的最后一封信,里面只有短短的一行: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之间可以通过命令相互切换。
绘制动态心形图案::R语言绘制心形图

例如,在第一个图层的基础上在新建一个图层,调整新图层的长度与宽度使之稍微小于第一个图层, 用pushViewport()锁定新图层,再调用一次心形函数,以此类推,循环创建多个嵌套图层,并依次在各个图层上画心形函数,于是我们可以得到一系列嵌套的心形。
此外,grid包允许我们对图形进行复制、旋转、放缩等修改。要旋转心形函数,我们并不需要修改函数本身,而是可以通过旋转viewport的方式旋转我们所需要绘制的图形。设置新viewport,调整angle函数,那么在此图层下绘制的任何图形将会被旋转。

利用viewport对图形进行修改,我们可以绘制各种有趣的图形pattern,本人只是grid包的初学者,如有偏颇之处望多多包涵。最后,祝愿大家情人节快乐!
以下是“情人节礼物”的代码:直通车

绘制动态心形图案::R语言绘制心形图