(我在理论计算机科学论坛上发布了同样的问题,但我怀疑它会得到很多关注,因为它更实用而非理论)
我正在寻找一种算法,它允许我生成一条线,就像它是手动绘制的一样,给定一个样本线。
换句话说,我有一条线(一幅画),我需要重新创建几次,就像人类在描图纸上描绘原始图纸时所做的那样。
当然,人类会将绘图与原始绘图非常接近,但会有轻微的错误。所以我想知道是否存在会扭曲绘图的算法,以便结果看起来像一个人制作的跟踪原稿。
这是一个动画绘图的程序。
答案 0 :(得分:2)
嗯。这是一个有趣的问题。我不知道Perlin噪音有多逼真,
但是这里是我包含brownian motion类型噪音的测试用例(例如 当对于给定点的直线扰动=先前扰动的总和+具有零中心和某个西格玛的高斯随机数:
图像从左到右显示为sigma的函数(从左到右递减)
以下是代码:
import numpy as np, numpy.random
import matplotlib.pyplot as plt
np.random.seed(1)
N = 1000
xs = np.arange(N)
thi = 6
sig = 0.00045
def getrand():
return np.cumsum(np.random.normal(0, sig, size=len(xs)))
# returns the cumulative sum of the set of random
# normally distributed numbers
plt.figure(1)
plt.plot(xs, getrand() * N, linewidth=thi, color='black')
plt.plot(xs, N + getrand() * N, linewidth=thi, color='black')
plt.plot(N + getrand() * N, xs, linewidth=thi, color='black')
plt.plot(getrand() * N, xs, linewidth=thi, color='black')
答案 1 :(得分:1)
一种方法是使用Perlin Noise。您可以在答案中找到有用的链接:Perlin Noise for 1D?