R语言——送你一朵小红花

最近看了张艺谋导演的《一秒钟》,感触有一点点多。张译好像终于不瘸了,刘浩存初看感觉平平无奇,越看越觉得好看。除了《一秒钟》,刘浩存和四字弟弟的电影《送你一朵小红花》最近的热度也是很高。可惜,我在美国看不到,只能等线上资源。刷了很多影评和剧透,很期待。

虽然看不到,但是也想画一朵小红花。在这样一个年月里,每个人都值得拥有一朵小红花。

画出一朵小红花其实非常简单,只需要一个正弦或者余弦函数,高级一点的,可以使用玫瑰曲线方程。有的时候不得不感慨,数学真的是万能的,一个及其简单的公式,却可以勾勒出复杂的世界。

送你一朵小红花

正余弦三角函数

如果只想简简单单绘制一朵平平无奇的小红花,那么正弦或者余弦函数就足以胜任。因为正余弦函数特殊的性质,我们在二维平面直角坐标系中绘制出特定周期长度的函数图线后,只需使用ggplot2中的coord_polar()将坐标轴转换为极坐标,就可绘制出小红花。

我们以正弦函数为例进行说明,余弦函数可以得到相同的效果。正弦函数的周期至少为两个,即轴的长度为,每个周期是一朵花瓣,所以可以画出两朵花瓣。如果我们要绘制出5朵花瓣,长度就应设定为。我们首先绘制出二维平面直角坐标系下的正弦函数图像:

### 加载ggplot2library(tidyverse)### 设定周期长度theta <- seq(0, 10*pi, length.out = 500)x <- sin(theta)  df <- data.frame(theta, x)### 绘制正弦函数曲线ggplot(df, aes(theta, x)) +  geom_line()
图片

上图是正弦函数的标准样式,下面我们在此基础之上,极化坐标:

ggplot(df, aes(theta, x)) +  ### 线条颜色改为红色  geom_line(color = "red") +  ### 用点表示花蕊  geom_point(x = 0, y = -1, size = 2) +  coord_polar() +  ### 去掉坐标轴  theme_void()
图片

我们可以使用geom_polygon()实现对花瓣颜色的填充:

ggplot(df, aes(theta, x)) +  geom_polygon(fill = "red") +  geom_point(x = 0, y = -1, size = 2) +  coord_polar() +  theme_void()
图片

如果你想绘制出更多花瓣,只需增加周期长度。

玫瑰曲线方程

除了简单的正余弦函数外,还有一个非常有名的玫瑰曲线。玫瑰曲线最早于1723年由意大利数学家Guido Grandi提出。玫瑰曲线的极坐标方程为:

直接根据极坐标绘制是很困难的,我们可以将其转换为直角坐标系方程:

在的范围内,当为偶数时,我们根据上述方程可以绘制出个花瓣,当为奇数时,我们可以绘制出个花瓣。当的取值范围不限于时,定义,不同的组合值可以绘制出不同的图案,如下图:

图片

我们这里首先绘制和前面一节相同的五瓣小红花:

### 设定取值范围theta <- seq(0, 2*pi, length.out = 500)### 根据玫瑰曲线方程计算直角坐标x <- cos(5*theta)*cos(theta)y <- cos(5*theta)*sin(theta)df <- data.frame(theta, x, y)ggplot(df, aes(x, y)) +  ### 这里不可使用geom_line()  geom_path(color = "red") +  theme_void() +  theme(aspect.ratio = 1)
图片

当我们将取值范围设定为,设定,就可得到更为复杂的曲线图案:

theta <- seq(0, 16*pi, length.out = 500)x <- cos((7/8)*theta)*cos(theta)y <- cos((7/8)*theta)*sin(theta)df <- data.frame(theta, x, y)ggplot(df, aes(x, y)) +  geom_path(color = "red") +  theme_void() +  theme(aspect.ratio = 1)
图片

以上,就是今天的内容,希望你也能画出一朵小红花。

来源:爱尔兰粉公爵,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/113165

发表评论

电子邮件地址不会被公开。 必填项已用*标注

技术服务
技术服务
关注抖音
关注抖音
进群学习 侵权联系
返回顶部