如何在两点之间插值以获得更高分辨率的绘图

时间:2012-01-16 02:47:18

标签: flash actionscript-3 math graphics drawing

在flash中,我使用lineTo在两点之间画一条线。这很好用,但我发现在较慢的计算机上,线条是锯齿状的,因为没有多少鼠标事件被触发。

我希望'平滑'线,在鼠标注册的每个点之间添加更多的点:

Illustration

黑线表示结果,绿色表示我想要的。红点是实际点,绿点是插值。

我自己尝试过编码,但我似乎无法做到正确,无论如何这里是代码:

var interX:Number = lastMouseX+(lastMouseSpeed.x/2);
var interY:Number = lastMouseY+(lastMouseSpeed.y/2);

//Also tried: lastMouseX+(this.mouseX-lastMouseX)/2;
// also jittery

graphics.lineTo(interX, interY);

graphics.lineTo(this.mouseX, this.mouseY);

lastMouseSpeed.x = this.mouseX-lastMouseX;
lastMouseSpeed.y = this.mouseY-lastMouseY;

lastMouseX = this.mouseX;
lastMouseY = this.mouseY;

结果比正常结果更加锯齿状。

抱歉,我无法提供截图(由于某种原因,它将我的屏幕复制为黑色)

1 个答案:

答案 0 :(得分:2)

您可能需要类似spline interpolation的内容,但其他方法也是可行的。

你当前的方法不起作用的原因是你想要为红点1和2之间的点做什么取决于红点3,但是你的方程式没有考虑到这一点。考虑它可以适当地考虑曲率,但它更复杂。