美文网首页大数据 爬虫Python AI Sql数据可视化大数据
自然的步伐——pi前1万位小数数据可视化

自然的步伐——pi前1万位小数数据可视化

作者: 真依然很拉风 | 来源:发表于2018-12-05 20:12 被阅读118次

    版权所有。转载请保留作者和原文链接信息。

    前些天在微信公众号上看到一篇文章,讲的是把圆周率pi的小位映射成曲谱,用钢琴演奏出来的效果(竟然还蜜汁好听……)

    众所周知,圆周率\pi是一个无限不循环的数学常数,然而它并不仅仅只是具有数学、物理含义,它代表着一种自然规律。正是这种玄妙的自然规律,以至于即使在听觉上映射成音符,也具有美妙的效果。数理、乐理,皆是自然之理,这种自然之理能在听觉上表示使人沉醉,那么理所当然,它也应当能在视觉上让人炫目。

    事实上,两年前我就看到一位大神把\pi可视化出来,的确具有让人眼前一亮的美观;根据当时传授给我的思想原理,这里复现一下。

    主要思想如下:把pi小数位映射成单位向量,意即从原点作为起点,每一位小数映射成一个方向,基于这个方向向前走一步,映射完N位小数,走了N步,会是一种什么样的轨迹。

    基于这个思想,我们把0-9归一化到0~2\pi的弧度,从0开始,向量长度固定为1,根据弧度分解成笛卡尔坐标系下的位移,每一步基于上一步的坐标迭代计算出下一步的坐标,然后把路径图画出来。

    下面直接上代码——————

    library(ggplot2)
    library(stringr)
    library(dplyr)
    nums <- str_extract_all(txt,"\\d") %>% unlist %>% as.numeric()
    nums <- nums/9*360
    mat <- matrix(nrow=length(nums),ncol=3)
    mat[,3] <- nums[1:nrow(mat)]
    
    get_next_pos <- function(x,y,angle,i){
        delta_x <- cos(angle/360*2*pi)
        delta_y <- sin(angle/360*2*pi)
        return(c(x+delta_x*i,y+delta_y*i))
    }
    
    mat[1,1:2] <- get_next_pos(0,0,nums[1],1)
    
    for(i in 2:nrow(mat)){
        mat[i,1:2] <- get_next_pos(mat[i-1,1],mat[i-1,2],nums[i],(1)^((i+1)%%2))
    }
    
    df <- as.data.frame(mat)
    colnames(df) <- c("x","y","num")
    
    
    ggplot(data = df[1:10000,],aes(x=x,y=y,color=num))+
        geom_path()+
        scale_color_gradient(low="#FED976",high="#BD0026")+
        labs(x="",y="")+
        guides(color=F)+
        theme(panel.background = element_rect(fill = "#212121"), 
              plot.background  = element_rect(fill = "#212121"), 
              panel.grid = element_blank(),
              legend.background = element_blank(),
              axis.text = element_blank(),
              axis.ticks = element_blank())
    

    (这怎么长得跟股价走势似的……)

    这看起来很像时间序列曲线,是因为我们限定了每往前走一步的长度是1,所以它的走势总体上是向上的;假如把规则换一下呢:如果令奇数步向前走-1,偶数步向前走1呢——即根据\pi小数位的方向,走一步退一步是什么样子的?

    只要把上述代码某行的1改成-1即可,再看一下路径走势。


    这样一来就美观多了,一个有意思的现象是:路径中间有一大片空白,它所代表的数学含义是什么呢?

    相关文章

      网友评论

        本文标题:自然的步伐——pi前1万位小数数据可视化

        本文链接:https://www.haomeiwen.com/subject/mntroftx.html