一朵迟来的玫瑰

七夕节当天在朋友圈看到了好几个朋友转发了使用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玫瑰花,所以可以任意拖曳成为不同的效果:
image-20240811071255189
然后我让人工智能大模型帮我一句句的解释一下上面的代码:
当然可以,这段代码是使用R语言中的plotly包来创建一个交互式的3D曲面图。下面是代码的逐行解释:

  1. library(plotly) - 载入plotly包,这是一个用于创建交互式图表的R包。
  2. x <- seq(0,24)/24 - 创建一个序列,从0到24,总共25个点,这里通过除以24进行了归一化。
  3. t <- seq(0,575,by=0.5)/575*20*pi+4*pi - 创建另一个序列,从0开始,以0.5为步长,乘以一个角度因子来生成角度值,并且加上4*pi来调整起始角度。
  4. grid <- expand.grid(x=x,t=t) - 使用expand.grid函数创建一个完整的网格,其中包含所有xt的组合。
  5. x <- matrix(grid$x,ncol = 25,byrow = TRUE) - 将grid中的x值转换为一个25列的矩阵,并且按行填充。
  6. t <- matrix(grid$t,ncol = 25,byrow = TRUE) - 将grid中的t值转换为一个25列的矩阵,并且按行填充。
  7. p <- (pi/2)*exp(-t/(8*pi)) - 定义变量p,它是一个根据t值变化的函数,用于控制玫瑰花瓣的开放程度。
  8. change <- sin(15*t)/150 - 定义变量change,它引入了正弦函数的变化,用于增加玫瑰花瓣形状的多样性。
  9. u <- 1-(1-(3.6*t) %% (2*pi)/pi)^4/2+change - 定义变量u,它是玫瑰花瓣的径向调制,通过周期性函数增加图形的复杂性。
  10. y <- 2*(x^2-x)^2*sin(p) - 定义变量y,它是根据xp计算的二次函数,用于调制花瓣的高度。
  11. r <- u*(x*sin(p)+y*cos(p)) - 定义变量r,它是最终的径向距离,结合uy进行调整。
  12. xx=r*cos(t) - 计算3D空间中点的x坐标。
  13. yy=r*sin(t) - 计算3D空间中点的y坐标。
  14. zz=u*(x*cos(p)-y*sin(p)) - 计算3D空间中点的z坐标。
  15. plot_ly(x=~xx,y=~yy,z=~zz,colors = 'Reds',opacity=0.5) %>% add_surface() - 使用plot_ly函数创建一个3D图,并使用add_surface添加曲面图层,颜色设置为红色系,透明度为0.5。
  16. ->plot - 将前面的绘图代码赋值给变量plot
  17. 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,互动交流!

Comments are closed.