Math 逐像素插值

Math 逐像素插值,math,line,interpolation,Math,Line,Interpolation,我需要在直线上用像素偏移一个点 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,该函数可以按百分比插值点,该点将位于

我需要在直线上用像素偏移一个点

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的中心。有没有办法用像素来实现这一点?

听起来你想写一个方法
插值(pt1,pt2,distancefromtp1)
。您现有的
interpolate
方法执行类似的操作,因此您可以使用后者来实现前者

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


你能解释一下你有什么问题吗?像素是屏幕上的一个点,因此任何作用于某个点的函数都应该作用于某个像素。:)我的意思是,我想传递偏移量的像素数,比如线上的+32px偏移量OK,听起来像是使用像素作为测量单位。我想我现在明白了。所以你想找到一个点的坐标,在pt1和pt2之间,离pt1有32个像素?我以前试过,但是当你有a,B,比如说1200px,你发现这个的百分比是30px,你得到的数值很小,它不能正常工作。计算机就是不能正确地计算距离。在我的机器上工作得很好。当点为(0,0)和(01200)且
distance from a
为30时,
f
的值是多少?它应该是0.975。我很抱歉我的错误,它工作得很好。我有另一个问题导致了这个问题
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);
}