マンデルブロ集合を表現する最も単純なアルゴリズムは、“Escape time algorithm” です。
参考文献: Escape time algorithm (Wikipedia)
- マンデルブロ集合は黒色で表す
- マンデルブロ集合の周辺は反復回数(iter)の値に応じて着色する
下記はR言語にてマンデルブロ集合を計算する関数を Escape time algorithm で書いたものです。
mandelbrot <- function(
center = -0.75+0.0i, ## 計算する範囲の中心
radius = 1.5, ## 計算する範囲の半径
mesh.size = 720, ## 計算する範囲の分割数
max.iteration = 50, ## 反復回数上限
escape.radius = 2 ## 脱出半径
) {
require(tidyverse)
x <- seq(Re(center)-radius, Re(center)+radius, length.out=mesh.size)
y <- seq(Im(center)-radius, Im(center)+radius, length.out=mesh.size)
m <- tibble(c=c(outer(x, y*1i, '+')), z=0+0i, iter=0)
for (i in 1:max.iteration) {
tmp <- Mod(m$z) < escape.radius
m <- m %>%
mutate(z=if_else(tmp, z^2 + c, z), iter=if_else(tmp, iter+1, iter))
}
m <- m %>%
mutate(iter=na_if(iter, max.iteration)) ## 反復回数上限に達した部分を NA に置き換え
return(m)
}
実行してみる。R言語でも簡単に表示できる。
library(tidyverse)
mandelbrot() %>%
ggplot() +
aes(x=Re(c), y=Im(c), fill=iter) +
geom_raster() +
scale_fill_gradientn(colors=rainbow(7), na.value='black') +
coord_fixed(ratio=1)
0 件のコメント:
コメントを投稿