使用以下AS3,它将使用curveTo()绘制一条曲线:

var line:Shape = new Shape();

line.x = line.y = 20;
line.graphics.lineStyle(2, 0xFF0000);
line.graphics.curveTo(200, 200, 200, 0);

addChild(line);

产生的视觉效果是:

现在,我希望某些东西能够沿这条路走下去。如何将该视觉转换为坐标列表?我对任何高级数学都感到困惑,但是我假设curveTo()使用了一个显而易见的公式(对于某些公式),上述公式可以复制并修改以创建所需的列表。

结果可能最终看起来像这样(假设点之间的偏移量约为5px)。
Vector.<Point> = [
    new Point(20, 20),
    new Point(23, 23),
    new Point(27, 28),
    new Point(33, 32),
    new Point(40, 37)
    /* ...etc... */
];

结果将用于诸如沿着以下路径生成弹丸雨之类的事情:

最佳答案

通过阅读 ActionScript 文档,我了解到 ActionScript 中的curveTo方法会生成二次Bezier曲线。

曲线由您在代码中指定的三个“控制点”组成:

control point 1 (p1) = (20,20)
control point 2 (p2) = (200,200)
control point 3 (p3) = (200,0)

要沿曲线在值u处插值(范围为0到1)(0是起点,1是终点),则可以使用所谓的伯恩斯坦多项式。对于二次曲线(您的情况),多项式为:
B1 = (1 - u) * (1 - u)
B2 = 2 * u * (1 - u)
B3 = u * u

只需为参数值u计算这些数字,然后将控制点与相应的伯恩斯坦多项式相乘即可。
point on curve at parameter *u* = p1 * B1 + p2 * b2 + p3 * B3

因此,例如,如果您想沿曲线获得5个点,则可以沿参数值0、0.25、0.5、0.75和1.0计算沿曲线的点。

关于actionscript-3 - 如何将curveTo()转换为点列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8935117/

10-09 23:35