Actionscript 3 内插as3

Actionscript 3 内插as3,actionscript-3,interpolation,Actionscript 3,Interpolation,我正在做一个项目,将一些源代码ActionScript3转换成C。它具有以下功能: Point.interpolate(Point p1, Point p2, Number distance) 此函数的文档如下所示 我想问函数的算法是如何工作的。如文档所述: 参数f的值越接近1.0,插值点就越接近第一个点(参数pt1)。参数f的值越接近0,插值点就越接近第二个点(参数pt2) 这可以通过以下方式实现: public static function interpolate(pt1:Point,

我正在做一个项目,将一些源代码ActionScript3转换成C。它具有以下功能:

Point.interpolate(Point p1, Point p2, Number distance)
此函数的文档如下所示


我想问函数的算法是如何工作的。

如文档所述:

参数f的值越接近1.0,插值点就越接近第一个点(参数pt1)。参数f的值越接近0,插值点就越接近第二个点(参数pt2)

这可以通过以下方式实现:

public static function interpolate(pt1:Point, pt2:Point, f:Number):Point
{
     var x:Number = f * pt1.x + (1 - f) * pt2.x;
     var y:Number = f * pt1.y + (1 - f) * pt2.y;

     return new Point(x, y);
}

正如文件所说:

参数f的值越接近1.0,插值点就越接近第一个点(参数pt1)。参数f的值越接近0,插值点就越接近第二个点(参数pt2)

这可以通过以下方式实现:

public static function interpolate(pt1:Point, pt2:Point, f:Number):Point
{
     var x:Number = f * pt1.x + (1 - f) * pt2.x;
     var y:Number = f * pt1.y + (1 - f) * pt2.y;

     return new Point(x, y);
}

var x:Number=pt1.x+f*(pt2.x-pt1.x)
是另一种编写它的方法(更少的乘法,更多的公共属性读取…可能不是瓶颈)。我刚刚尝试过,两个版本的性能相同:10000000次调用,每个版本12378和12374毫秒。我知道这取决于平台,但我认为可读性在这里更重要。所以OP可以选择他喜欢的版本。我运行了一些基准测试(如果可以肯定,为什么要争论!),它的性能几乎相同(在flash中,这是-不确定C#)。编辑:基准测试:D@JonatanHedborg-是的,我自己已经做了一些基准测试。参见我之前的评论:)
var x:Number=pt1.x+f*(pt2.x-pt1.x)
是另一种编写方法(更少的乘法,更多的公共属性读取…可能不是瓶颈)。我刚刚尝试过,两个版本的性能相同:10000000次调用,每个版本12378和12374毫秒。我知道这取决于平台,但我认为可读性在这里更重要。所以OP可以选择他喜欢的版本。我运行了一些基准测试(如果可以肯定,为什么要争论!),它的性能几乎相同(在flash中,这是-不确定C#)。编辑:基准测试:D@JonatanHedborg-是的,我自己已经做了一些基准测试。见我之前的评论:)