2012-03-05 107 views
1

我正在开发一些将源代码ActionScript 3转换为C#的项目。它具有以下功能:interpolate as3

Point.interpolate(Point p1, Point p2, Number distance) 

此功能的文档是here

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

回答

5

作为文档说:

越接近参数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); 
} 
+0

'变种X:总数= pt1.x + F *(pt2.x - pt1.x)'是另一种方式把它写(更少的乘法,更多的公共财产阅读......可能不是一个瓶颈无论)。 – 2012-03-05 13:24:45

+0

我刚刚尝试过,两个版本的性能相同:每个版本的10000000个呼叫,12378和12374毫秒。我知道这取决于平台,但我认为可读性在这里更重要。所以OP可以选择他喜欢的版本。 – sch 2012-03-05 13:47:54

+0

我跑了一些基准测试(为什么争论什么时候你可以肯定!),它在性能上几乎相同(在闪存中 - 不知道C#)。编辑:基准测试:D – 2012-03-05 13:50:50