在谷歌搜索时我找不到任何关于此任务的信息,但我无法想象没有人想到过这样做。有没有一种方法可以选择字母形式生成随机2D数据?因此,基本上,函数letter_random_data(letter)
会输出x
和y
坐标(在某些边界内),并与一些噪声一起形成所选字母。
答案 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"))
这将产生以下情节: