yuanfan 我本来没有去运行那段代码,但是被你这么带的,我跑看了下,我知道为啥原博客没有附图了。

yuanfan 早年间有段时期论坛里有一股用 R “不务正业”的风气,我看这股歪风时隔十几年又要刮起来了。

yuanfan 用我残存的一点初中三角函数知识勉强算了一下坐标。我只是路过手痒,上桌搓一把就走,麻将你们继续。我估计楼主的多数花都可以这样蛮力画出来,只是太杀时间了。

# 将坐标矩阵逆时针旋转 theta 度
rotate = function(m, theta) {
  ct = cos(theta); st = sin(theta)
  as.matrix(m) %*% matrix(c(ct, -st, st, ct), 2)
}

# 一层花瓣的坐标矩阵
petal_one = function(n = 8, init = 0, r = 1, N = 100) {
  a = 2 * pi / n / 2  # 每片花瓣夹角的一半
  x1 = r * cos(a)
  y1 = r * sin(a)
  r2 = r * tan(a)
  a2 = pi/2 - a
  x2 = r2 * cos(a2)
  t = seq(-pi/2 - a, pi/2 + a, length.out = N)
  x3 = x1 + x2 + r2 * cos(t)
  y3 = r2 * sin(t)
  xa = c(0,  x1, x3, x1, 0)
  ya = c(0, -y1, y3, y1, 0)
  xy = cbind(xa, ya)
  res = lapply(init + 2 * pi * (seq(n) - 1)/n, function(theta) {
    rbind(rotate(xy, theta), NA)
  })
  do.call(rbind, res)
}

petal_all = function(L = 3, n = 8, ...) {
  res = NULL
  for (i in L:1) {
    init = if (i %% 2 == 0) pi/n else 0
    res = rbind(res, petal_one(n, init, 2 + i/L, ...))
  }
  res
}

# 参数:L 为层数,n 为花瓣数量
draw_flower = function(...) {
  xy = petal_all(...)
  par(mar = rep(1, 4), bg = '#FFFFE0')
  plot(xy, type = 'n', asp = 1, ann = FALSE, axes = FALSE)
  polygon(xy, col = '#FF6A6A', border = 'white', lwd = 5)
  points(0, 0, cex = 10, col = 'white', bg = '#FFA500', pch = 21, lwd = 3)
}

# 默认 3 层 8 瓣
draw_flower()

# 4 层 16 瓣
draw_flower(4, 16)

# 锐化花瓣(五角花瓣)
draw_flower(N = 5)

楼主的花蕊左上角有一段白弧,估计是无意渲染出来的,但造成了画花点晶的光线效果;我画的花蕊缺了那一丁点用来表示亮晶晶的白色反光,相比之下就土了一截。

image

    yihui 我之前看过贵厂 Thomas Lin Pedersen 用 R 画了很多艺术作品,甚是惊艳,BG 一下子上去了,见网站 https://www.data-imaginist.com/art
    Thomas Lin Pedersen 说不会给出结果,因为那是创造力的杀手,我猜模拟一些二维或三维空间中的随机过程,有可能实现类似的效果。还有一些常、偏微分方程(组)的解也可能实现。要点是先找到有趣的方程。

    楼上各位有兴趣的可以凑一桌麻将了。

      tctcabCloud2016 所说,感觉这些例子的难点在于数学和物理(我已经都还给老师了),JS 可能是最简单的一环,不过肯定有很多的 JS 库已经把基础工作都做好了。即便有现成的库可以调用,估计我的智商还是差远了,我只能理解简单的几何图形;记得 2004 年左右我用 VB 写过一个随机下雪的程序,那种 y = y + d 的简单移动大概就是我的能力上限了。

      回到画花问题上,我估计 R 基础图形系统里的 xspline() 函数可能会有点用,比如楼主花纹系列的第一幅图的圆角也许用 X 样条去算近似坐标会比用三角函数硬算精确坐标更简单一点。

      yihui

      土的是我才对,那道白弧是截图的时候无意中弄出来的,原图确实是没有的。

      楼上的小伙伴们这是要滑向艺术的深渊呐。

      听闻谷歌开发了一个名为 Disco Diffusion 的工具,可以做到 AI 画画。出得去的小伙伴可以去瞅瞅,是不是输入一句古诗也能画出图来,比如:夜雨打金荷。

      tctcab

      已经投了,要不回头 TC 君不卧倒装死了,去审一审那篇?

      我今天在B站上正好看到有弹幕刷“厚礼蟹”,这才后知后觉反应过来居然也是一个梗。

      19 天 后
      15 天 后

      yuanfan 刚上面那位有本好书,《数据可视化基础》我买了,翻他博客看到的。