是否有可能产生这种随机曲线?
我尝试了IMagick bezier曲线(见http://www.php.net/manual/en/function.imagickdraw-bezier.php),但即使有20-30分,它们看起来也不像这样。这是我的样本http://mechanicalzilla.com/sandbox/imagick/curve.php
谢谢。
答案 0 :(得分:5)
我打赌你可以编写一个算法,在直接进入出口坐标之前基本上会有x
个随机扭曲。这也假设算法足够智能以检查转弯的角度。 (假设你不想在结网中结束)
然而,假设这不是你的毕业任务,或者你是按小时付费来处理这个问题,这将浪费时间,成功是非常值得怀疑的。
即使你设法生成单行算法,这样做也不会让线条彼此靠得太近。你最终会得到这样的结论:
答案 1 :(得分:4)
这远不是一个完整的答案,但在我看来,它似乎可以帮助你:
不是从整条线的起点到终点绘制曲线,而是考虑将板细分为均匀间隔的网格。网格中一列的每个正方形都有权在其中有一个曲线点,并且您将从左向右稳定前进(首先是为了简单起见)。
随机性会通过为曲线选取一个正方形来发挥作用 - 为了防止它变得过于混乱,你可以给出这种随机性界限,比如说,“你不能选择一个正方形(如果距离正方形到正方形被视为1
)违反abs(current vertical position - new vertical position) <= 5
,除非此时此类不再有任何“或其他任意约束”。 (“除非此时不再有任何此类免费”很重要,否则就有可能将自己锁定在一个无法解决的状态。)
(抱歉,用我的鼠标绘制曲线 - >最差/没有插值。但是,我想,Catmull-Rom插值可能是你的朋友。)
显示应该足够宽松,因为你的曲线点不能在给定网格的情况下任意散射在一起,但是可能很难让曲线“流畅地”连接到终点 - 可能是如果你不介意任意的终点,这是一个很好的解决方案,但是,算法可以自己决定它想要行结束的位置。
认为这个想法可能对你的曲线有帮助吗?
答案 2 :(得分:3)
看起来像:
x = 0; y = 0; angel = 0;
while (true) {
angel = angel + 0.5 - random(1);
x1 = x + 0.1 * cos(angel);
y1 = y + 0.1 * sin(angel);
if (abs(x1 - x) + abs(y1 - y) < 10)
drawline(x,y,x1,y1);
x = x1; y = y1;
if (x < 0) x = width;
if (y < 0) y = height;
if (x > width) x = 0;
if (y > height) y = 0;
}