【问题标题】:interpolation point by pixels逐像素插值
【发布时间】:2012-07-24 12:02:18
【问题描述】:

我需要在线上偏移一个点。

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 之间,距离 pt1 32 像素?

标签: math line interpolation


【解决方案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);
}

【讨论】:

  • 我之前尝试过这个,但是当你有 A,B 让我们说 1200px 并且你发现它的百分比是 30px 你得到非常小的数字并且它不能正常工作。计算机无法正确计算距离
  • 在我的机器上完美运行。当点数为 (0,0) 和 (0,1200) 且 distanceFromA 为 30 时,f 的值是多少?它应该是 0.975。
  • 很抱歉我的错误它完美地工作我有另一个导致问题的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
相关资源
最近更新 更多