七夕节当天在朋友圈看到了好几个朋友转发了使用R编程语言绘制一个动态交互式的玫瑰花,颜值还不错!
代码来源于朋友圈多个公众号,已经没办法搞清楚原创是谁了,我就复制粘贴一下借花献佛给大家哦
# install.packages('plotly')
library(plotly)
x <- seq(0,24)/24
t <- seq(0,575,by=0.5)/575*20*pi+4*pi
grid <- expand.grid(x=x,t=t)
x <- matrix(grid$x,ncol = 25,byrow = TRUE)
t <- matrix(grid$t,ncol = 25,byrow = TRUE)
p <- (pi/2)*exp(-t/(8*pi))
change <- sin(15*t)/150
u <- 1-(1-(3.6*t) %% (2*pi)/pi)^4/2+change
y <- 2*(x^2-x)^2*sin(p)
r <- u*(x*sin(p)+y*cos(p))
xx=r*cos(t)
yy=r*sin(t)
zz=u*(x*cos(p)-y*sin(p))
plot_ly(x=~xx,y=~yy,z=~zz,colors = 'Reds',opacity=0.5) %>% add_surface()->plot
add_trace(plot,x=rep(0),y=rep(0),z=seq(-0.5,0,length=4),
mode='lines',line=list(color='green',width=8))
如下所示的交互式3D玫瑰花,所以可以任意拖曳成为不同的效果:
然后我让人工智能大模型帮我一句句的解释一下上面的代码:
当然可以,这段代码是使用R语言中的plotly
包来创建一个交互式的3D曲面图。下面是代码的逐行解释:
library(plotly)
- 载入plotly
包,这是一个用于创建交互式图表的R包。x <- seq(0,24)/24
- 创建一个序列,从0到24,总共25个点,这里通过除以24进行了归一化。t <- seq(0,575,by=0.5)/575*20*pi+4*pi
- 创建另一个序列,从0开始,以0.5为步长,乘以一个角度因子来生成角度值,并且加上4*pi
来调整起始角度。grid <- expand.grid(x=x,t=t)
- 使用expand.grid
函数创建一个完整的网格,其中包含所有x
和t
的组合。x <- matrix(grid$x,ncol = 25,byrow = TRUE)
- 将grid
中的x
值转换为一个25列的矩阵,并且按行填充。t <- matrix(grid$t,ncol = 25,byrow = TRUE)
- 将grid
中的t
值转换为一个25列的矩阵,并且按行填充。p <- (pi/2)*exp(-t/(8*pi))
- 定义变量p
,它是一个根据t
值变化的函数,用于控制玫瑰花瓣的开放程度。change <- sin(15*t)/150
- 定义变量change
,它引入了正弦函数的变化,用于增加玫瑰花瓣形状的多样性。u <- 1-(1-(3.6*t) %% (2*pi)/pi)^4/2+change
- 定义变量u
,它是玫瑰花瓣的径向调制,通过周期性函数增加图形的复杂性。y <- 2*(x^2-x)^2*sin(p)
- 定义变量y
,它是根据x
和p
计算的二次函数,用于调制花瓣的高度。r <- u*(x*sin(p)+y*cos(p))
- 定义变量r
,它是最终的径向距离,结合u
和y
进行调整。xx=r*cos(t)
- 计算3D空间中点的x坐标。yy=r*sin(t)
- 计算3D空间中点的y坐标。zz=u*(x*cos(p)-y*sin(p))
- 计算3D空间中点的z坐标。plot_ly(x=~xx,y=~yy,z=~zz,colors = 'Reds',opacity=0.5) %>% add_surface()
- 使用plot_ly
函数创建一个3D图,并使用add_surface
添加曲面图层,颜色设置为红色系,透明度为0.5。->plot
- 将前面的绘图代码赋值给变量plot
。add_trace(plot,x=rep(0),y=rep(0),z=seq(-0.5,0,length=4), mode='lines', line=list(color='green',width=8))
- 向图中添加绿色线条,这些线条可以代表花茎或其他装饰线。
整体来看,这段代码通过数学公式生成了一系列3D坐标点,然后使用plotly
包将这些点绘制成一个3D曲面图,形成了一朵玫瑰花瓣的形状,并且添加了一些装饰线条。继续让人工智能大模型帮我改进
我想让人工智能大模型帮我改进上面的代码,需求是可以同时绘制3朵玫瑰花,甚至更多,但是失败了。
另外一个需求是玫瑰图里面嵌入爱人的名字,这个倒是很简单的。可以在我们的人工智能大模型专辑进行直播互动调试哈,欢迎大家关注我们的视频号哦,每个工作日的中午11:30到12:30,互动交流!