2013-05-05 93 views
1

我做了一些點的縮放/放大時的轉換。我的目標是根據此比例計算偏移量。如何恢復轉換?

我的問題是,當從大規模走向更小規模時,我當然會有相同的偏移量。例如,如果我從3縮放到4並從4縮回到3,則3的比例偏移應始終相同。我的公式不是這樣的。基於forumla

px = 200 
offset = 0 
scale: 1, and goes always +-1 

計算:我不能讓我的頭左右我在做什麼錯newOffset = oldOffset +- px/scale;

scale = 2 => offset = 0  + 200/2 = 100 
scale = 3 => offset = 100 + 200/3 = 166,67 
scale = 4 => offset = 166,67 + 200/4 = 216,67 

我怎樣才能恢復比例?

scale = 3 => offset = 216,67 - 200/3 = 150 # //it should evaluate to 166,67 

回答

1

偏移量由遞推關係定義:

offset(0) = 0 
offset(i) = offset(i-1) + px/(i+1) 

或者,如果我們寫出來的前幾個條款,

offset0 = 0 
offset1 = offset0 + px/2 = 100 
offset2 = offset1 + px/3 = offset0 + px/2 + px/3 = 166.67 
offset3 = offset2 + px/4 = offset0 + px/2 + px/3 + px/4 = 216.67 

所以偏移量等於常數,offset0,加上諧波序列的前N項(對於n = 2,3,...的項1/n的總和),由px縮放。

對於諧波序列的前N項,沒有閉式代數表達式,因此要麼存儲數字並根據需要查找它們,要麼在「重新縮放」時重新計算該值。