【发布时间】:2013-06-12 07:00:03
【问题描述】:
我正在学习如何制作Julia Set 分形。我正在使用this as a reference。
我非常了解它背后的数学理论。我也可以手动计算。但是,我不明白的是它在参考中提到的程序中是如何完成的。
作者有确定zoom和位移的某些变量,他对其进行了一些计算。
谁能解释一下它们是什么?
【问题讨论】:
标签: image-processing language-agnostic fractals
我正在学习如何制作Julia Set 分形。我正在使用this as a reference。
我非常了解它背后的数学理论。我也可以手动计算。但是,我不明白的是它在参考中提到的程序中是如何完成的。
作者有确定zoom和位移的某些变量,他对其进行了一些计算。
谁能解释一下它们是什么?
【问题讨论】:
标签: image-processing language-agnostic fractals
让我们看一下这一行(它下面的工作方式相同):
newRe = (x - w / 2) / (0.5 * zoom * w) + moveX;
(忽略缺少1.5 因素,这只是为了确保它看起来不会“被压扁”。)
它位于for 循环中,将0 和w 之间的值分配给x。[1] 所以最左边和最右边的newRe 值将是:
最左边:
newRe = (0 - w / 2) / (0.5 * zoom * w) + moveX;
= -(w / 2) / w / 0.5 / zoom + moveX;
= -(1 / 2) / 0.5 / zoom + moveX;
= -1 / zoom + moveX;
最右边:
newRe = (w - w / 2) / (0.5 * zoom * w) + moveX;
= (w / 2) / w / 0.5 / zoom + moveX;
= (1 / 2) / 0.5 / zoom + moveX;
= 1 / zoom + moveX;
它们的区别——即显示的 Julia 分形的实际矩形的宽度——等于:
(1 / zoom + moveX) - (-1 / zoom + moveX)
= (1 / zoom) - (-1 / zoom)
= 2 / zoom
(整个计算也适用于newIm、h 和moveY。)
这就是为什么增加缩放会导致我们正在检查的矩形缩小——这正是“放大”的含义。
[1] 它实际上只针对w-1,但是一个像素的差异使这个计算变得更加困难。
【讨论】:
for循环中的x和y值是像素坐标,使用这种方法映射到newRe和newIm。
moveX 和moveY 就让我们在分形世界中漫步吧??
newRe 和 newIm。