以字母形式生成随机数据

时间:2019-01-09 13:52:43

标签: r random

在谷歌搜索时我找不到任何关于此任务的信息,但我无法想象没有人想到过这样做。有没有一种方法可以选择字母形式生成随机2D数据?因此,基本上,函数letter_random_data(letter)会输出xy坐标(在某些边界内),并与一些噪声一起形成所选字母。

1 个答案:

答案 0 :(得分:2)

这是一种实现方法:绘制一个包含字母(或更普遍的文字)的图像。将图像读入数组,然后使用它接受或拒绝在保存图像的框中随机绘制的点。

例如,

library(png)

getTextImage <- function(text) {
  filename <- tempfile()
  png(filename = filename)
  plot.new()
  cex <- 1
  repeat {
    if (strwidth(text, cex = 2*cex) > 1) break
    if (strheight(text, cex = 2*cex) > 1) break 
    cex <- 2*cex
  }
  text(0.5, 0.5, text, cex = cex)
  dev.off()
  image <- readPNG(filename)
  unlink(filename)    # clean up file
  if (length(dim(image)) == 3)
    image <- image[,,1] # just keep one channel
  image
}

randomText <- function(n, text) {
  image <- getTextImage(text)
  nx <- dim(image)[1]
  ny <- dim(image)[2]
  hits <- 0
  x <- y <- numeric(n)
  while (hits < n) {
    tryx <- runif(1)
    tryy <- runif(1)
    keep <- image[round((nx-1)*tryx + 1), round((ny-1)*tryy + 1)] == 0
    if (keep) {
      hits <- hits + 1
      # Need to rotate so it looks good
      x[hits] <- tryy
      y[hits] <- 1 - tryx
    }
  }
  cbind(x, y)
}

plot(randomText(1000, "Hello"))

这将产生以下情节:

screenshot