前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >绘制动态心形图案::R语言绘制心形图

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

作者头像
学到老
发布2018-03-16 17:32:55
3.8K0
发布2018-03-16 17:32:55
举报

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

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

代码语言:javascript
复制
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作为基本图形。

代码语言:javascript
复制
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包的初学者,如有偏颇之处望多多包涵。最后,祝愿大家情人节快乐! 以下是“情人节礼物”的代码:直通车

这里写图片描述
这里写图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档