美文网首页数据-R语言-图表-决策-Linux-Python
爱你在心口难开,只能编程画出来。

爱你在心口难开,只能编程画出来。

作者: 9d760c7ce737 | 来源:发表于2019-08-07 15:49 被阅读0次

今天不一样哈,记得去年这时候我在上海学习,晚上在酒店里面,必须带着降噪耳机才能安稳睡觉。
我们中国人大部分都是含蓄的,外国人在一起,母子之间经常会说“I love you”,而我, 根本开不了口,我觉得气氛会异常尴尬。
夫妻之间,也是哈,面对面也说不了。所以,给说这种温馨的话安排一个固定的时机,成了大家的心病,继而情人节因运而生,专门解决这个难题,这一天感情到位的都云淡风轻,感情欠一点的尽显风情,什么话都说的出来。
而我属于那种看起来外向,实际上含蓄的人,我和我妻子在一起10年了,当面喊出老婆这两个字都会很不好意思,通常都是用昵称代替。我想到人群中一定会有跟我一样的人,所以,我决定在今天用编程帮帮他们。

首先,画颗心表达爱意

想要编程来画,就得找到表示心形的曲线函数。
还好,这个地方汇集了大量的曲线函数
http://mathworld.wolfram.com/topics/PolarCurves.html
而我在里面看到了心形


点进去之后,发现目前有6种函数可以画心,但是我喜欢的是最后一个

回到R语言中,把刚才看到的那个方程,写成一个函数,这个函数返回一个数据框,每一行代表一个点,这个点有x坐标,也有y坐标。
library(tidyverse)
heart_vertices <- function(xc,yc,size,npoints=100,...){
  r = size*0.05
  yc = yc + 0.1*r  ## 调整心形的中心
  t = seq(-pi,pi, length.out=npoints+1)
  ## 产生x
  x = xc + 16 * r *(sin(t))^3
  ## 产生y
  y = yc + r*13*cos(t) - r*5*cos(2*t) - r*2*cos(3*t) - r*cos(4*t)
  df <- data.frame(theta=t,x=x,y=y) 
  return(df)
}

尝试调用函数,给出数据

dd <- heart_vertices(0,0,2)

现在只要用ggplot2这个包中geom_polygon函数来连接这些点就可以了。

library(ggplot2)
ggplot(dd)+
  geom_polygon(aes(x=x,y=y), fill="#f03b20", color="#ece2f0",size=10) +
  theme_void() 

不可思议哈,理想照进现实就是这个样子,就这样,我们把那些高深的函数,化为己用,变成爱的语言。

接着,来点玫瑰增加气氛

画了上面的图之后,人是膨胀的,因为你知道,我们还有那么多画图的曲线函数没有用呢?
比如情人节,也要有玫瑰花啊


点进去,发现,确实有个函数在等我们



我们按照公式生成一个数据,里面的8是代表最终花有8瓣。

rose <- tibble(
  t = seq(-pi,pi, length.out=1000),
  r1 = cos(8*t)
) 

ggplot2这个包中geom_polygon函数来连接这些点:

ggplot(rose,aes(x=t, y=r1)) + 
  geom_polygon(fill="#f03b20", color="#ece2f0",size=2) +
  theme_void() 

发现是不行的,这个应该就是余弦函数的曲线吧



现在我要要改变他的坐标轴

ggplot(rose,aes(x=t, y=r1)) + 
  geom_polygon(fill="#f03b20", color="#ece2f0",size=2) +
  coord_polar() +
  theme_void() 

最后,给只蝴蝶添加一点活力

现在爱她的心和玫瑰都有了,通常,招花引碟嘛,有了花还缺点蝴蝶啊什么的,还好,曲线库里面也有蝴蝶


image.png

点击去发现我们需要的是右边那个



有了方程就好办啊,写一个函数
butterfly_vertices <- function(xc,yc,npoints=1000,...){
  t = seq(0,12*pi, length.out=npoints+1)
  x = xc + sin(t)*(exp(cos(t))-2*cos(4*t)-sin(t/12)^5)
  y = yc + cos(t)*(exp(cos(t))-2*cos(4*t)-sin(t/12)^5)
  df <- data.frame(x=x,y=y,t=t)
  return(df)
} 

先产生一个数据来看看:

dd <- butterfly_vertices(1,1)

接下来还是用geom_polygon来画图:

ggplot() +
  geom_polygon(data=dd, 
               aes(x=x,y=y,fill=factor(floor(t/pi))), color="#000000de") +
  theme_void() +
  scale_fill_viridis_d(alpha=0.3, guide="none") +
  scale_color_viridis_c(option="magma", guide="none")

现在爱心,玫瑰,蝴蝶都有了,还缺什么呢,我想应该是个孩子吧。但这个编程解决不了,靠大家的运气。
我是果子,祝大家情人节快乐。

相关文章

  • 爱你在心口难开,只能编程画出来。

    今天不一样哈,记得去年这时候我在上海学习,晚上在酒店里面,必须带着降噪耳机才能安稳睡觉。我们中国人大部分都是含蓄的...

  • 为你写诗|爱你在心口难开

    爱你在心口难开 只好说那不是爱 对你只能说喜欢 不喜欢了就分开 爱你在心口难开 其实不必说出来 点点滴滴都是情 说...

  • 手机,爱你在心口难开

    手机,爱你在心口难开 ...

  • 如何优雅又不过于含蓄的,让男生知道你的心意?

    Oh~Oh~~~yeah~~~~! 爱你在心口难开! 我不知道应该说些什么? Oh~~oh爱你在心口难开~~~~ ...

  • 我爱你中国

    我爱你中国 爱你在心口难开 你已融入我的血液 我为你骄傲自豪 爱你在心口难开 我可爱的祖国 历史的长河 滚滚东逝水...

  • 爱你在心,口难开

    因为不明白爱消沉过,因为不明白爱不羁过。 爱有千万种,但偏偏我对你的爱难说出口。最初的美好,毕竟无法长远,曾想过深...

  • 爱你在心,口难开

    爱你在心,口难开。 看着拥挤的人群中, 你渐行渐远的背影。 多想大声告诉你, 你是我生命中的奇迹, 是我从不曾奢望...

  • 爱你在心,口难开

    昨晚梦见和妈妈出去逛街,醒来的时候心里却有些失落…… 去年暑假,一直住在幺爸家直到开学前才硬送我回去了。今年寒假,...

  • 爱你在心  口难开

    H小姐第一次见到Y先生是在她刚进公司不久的时候,在办公室大约是在周五的例会上,那天办公室人格外的多。作为新人的H小...

  • 爱你在心,口难开

    是你赐予了我血肉之躯,赋予我生命,温暖我,呵护我,爱我,照顾我,让我健健康康的长大成人。可至始至终,我却从未和你说...

网友评论

    本文标题:爱你在心口难开,只能编程画出来。

    本文链接:https://www.haomeiwen.com/subject/arswdctx.html