我应该使用什么算法来平滑地缩放图形或贴图?

时间:2010-10-27 14:37:25

标签: algorithm language-agnostic zoom scaling graphing

我有一个由函数生成的图形,它会根据函数的值自动放大和缩小。我已经有了图形工具,我可以以高分辨率显示任何x,y,宽度,高度。

我试图抓住正确的位置:

x = target_x
y = target_y
width = target_width
height = target_height

但它太疯狂了。很难分辨出放大/缩小的部分。

我也试过这样做:

orig_x = x //ditto for y, width, height, etc
for i=1 to 10
    x = i/10*new_x + i/10*orig_x
    wait 25ms

它更顺畅,但第一步还是太疯狂了。如果orig_x为10且new_x为100万,则第一次跳跃太大,接近1,000,000%。然而,最后一次跳跃只有10%。几何级数甚至更好,但如果我必须在缩放中间切换方向,则步骤会很快。

使用效果最好的是什么?

2 个答案:

答案 0 :(得分:2)

您希望缩放/移动每个步骤的最后一个窗口的固定百分比。这意味着您的缩放将是一个指数曲线,您的移动将与您的缩放相关联。像下面这样的东西应该是一个改进:

width_ratio = new_width / old_width
width_ratio_log = log(width_ratio)

x_diff = new_x - old_x
x_factor = x_diff / (width_ratio - 1)
-- warning: need to handle width_ratio near 1 the old way!

for i=1 to steps
    width_factor = exp(width_ratio_log * i / steps)
    width = old_width * width_factor
    x = old_x + x_factor * (width_factor - 1)

    -- similarly for y and height...

答案 1 :(得分:0)

我可以试试

xDiff = new_x - orig_x
stepCount = 10

for i=1 to stepCount
    x = orig_x + i/stepCount * xDiff
    wait 25ms