0

我需要按像素在线偏移一个点。

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”为 0.5,则此函数可以按百分比插入点,该点将位于线 pt1 pt2 的中心。有没有办法用像素做到这一点?

4

1 回答 1

1

听起来你想写一个方法interpolate(pt1, pt2, distanceFromPt1)。您现有的interpolate方法做了类似的事情,因此您可以使用后者来实现前者。

现在,如果你调用interpolate(A,B,f),你会得到一个点 D (distanceBetween(A,D) / distanceBetween(A,B)) == 1-f。在你想写的 interpolate 版本中,你不知道f应该是什么,但你可以解决它,因为你知道distanceBetween(A,D).

function iterpolateByDistance(A, B, distanceFromA){
    //(dist(A,D) / dist(A,B)) == 1-f
    //f + (dist(A,D) / dist(A,B)) == 1
    //f == 1 - (dist(A,D) / dist(A,B))
    f = 1 - (distanceFromPt1 / distanceBetween(A, B));
    return interpolate(A, B, f);
}
于 2012-07-24T13:34:31.477 回答