我有一个由函数生成的图形,它会根据函数的值自动放大和缩小。我已经有了图形工具,我可以以高分辨率显示任何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%。几何级数甚至更好,但如果我必须在缩放中间切换方向,则步骤会很快。
使用效果最好的是什么?
答案 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