2012-07-24 63 views
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的中心這個功能可以通過插值百分之點。有沒有辦法用像素做到這一點?

+0

你能解釋你有什麼問題嗎?像素是屏幕上的一個點,因此任何在點上工作的函數都應該在像素上工作。 – Kevin 2012-07-24 12:56:12

+0

:)我的意思是我想傳遞像素的像素數量,像線條上的+ 32px偏移量 – Yovo 2012-07-24 13:11:58

+0

好的,這聽起來像是使用像素作爲度量單位。我想我現在明白了。所以你想找到位於pt1和pt2之間的點的座標,距離pt1 32個像素? – Kevin 2012-07-24 13:20:47

回答

1

它聽起來像你想寫一個方法interpolate(pt1, pt2, distanceFromPt1)。你現有的interpolate方法做了類似的事情,所以你可以使用後者來實現前者。

現在,如果您致電interpolate(A,B,f),您會得到一個D點,其中(distanceBetween(A,D)/distanceBetween(A,B)) == 1-f。在你想寫的插值版本中,你不知道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); 
} 
+0

我以前試過,但是當你有A,B可以說1200px,你會發現這個百分比是30px,你會得到非常小的數字,它不能正常工作。電腦無法正確計算距離 – Yovo 2012-07-25 10:44:29

+0

在我的機器上完美工作。當點數是(0,0)和(0,1200),'distanceFromA'是30時,'f'的值是多少?它應該是0.975。 – Kevin 2012-07-25 11:44:24

+0

我很抱歉我的錯誤,它完美的工作我有另一個問題導致問題 – Yovo 2012-07-25 23:08:50