2025/01/15

マンデルブロ集合の彩色方法(3)

03.knit

下記文献をもとに滑らかな色付けを実行します。

参考文献:Renormalizing the Mandelbrot Escape

まずは前回説明した Histogram coloring によるマンデルブロ集合を再掲します。

mandelbrot()関数の中身は省略します。知りたい方は 初回の記事 を参照ください。

library(tidyverse)

m1 <- mandelbrot()

### Histogram coloring ###
h <- m1 %>%
    filter(!is.na(iter)) %>% ## NA を除外
    count(iter) %>%          ## iterの値毎に個数をカウント
    mutate(n=cumsum(n)) %>%  ## 累積和を求める
    mutate(n=n/max(n))       ## 値域を[0,1]にする

m1 %>%
    left_join(h, by='iter') %>%
    mutate(n=if_else(is.na(iter), NA_real_, n)) %>%
    ggplot() +
    aes(x=Re(c), y=Im(c), fill=n) +
    geom_raster() +
    scale_fill_gradientn(colors=rainbow(7), na.value='black') +
    coord_fixed(ratio=1)

上の図は、前回の記事で指摘したように多くの色が使用されているが、綺麗な虹色にはなっていません。iter値が整数であるため、滑らかな色の変化にはならず、色の帯として現れます。

下の図は、Continuous (smooth) coloring と Histogram coloring を適用したものです。滑らかな虹色になっています。

### Continuous (smooth) coloring ###
m2 <- m1 %>%
    mutate(z=z^2+c, iter=iter+1) %>%
    mutate(z=z^2+c, iter=iter+1) %>%
    mutate(iter2=iter-log10(log10(Mod(z)))/log10(2))

### Histogram coloring ###
h <- m2 %>%
    filter(!is.na(iter2)) %>% ## NA を除外
    count(iter2) %>%          ## iterの値毎に個数をカウント
    mutate(n=cumsum(n)) %>%   ## 累積和を求める
    mutate(n=n/max(n))        ## 値域を[0,1]にする

m2 <- m2 %>%
    left_join(h, by='iter2') %>%
    mutate(n=if_else(is.na(iter2), NA_real_, n))

ggplot(m2) +
    aes(x=Re(c), y=Im(c), fill=n) +
    geom_raster() +
    scale_fill_gradientn(colors=rainbow(7), na.value='black') +
    coord_fixed(ratio=1)

0 件のコメント:

コメントを投稿

マンデルブロ集合の彩色方法(4)

04.knit 1 Binary Decomposition 下記文献に従い着色した。 参考文献: Binary Decompo...