π-Day快乐:Python可视化π

π-Day快乐:Python可视化π

今天是3.14,正好是圆周率 π \pi π 的前3位,因此数学界将这一天定为 π \bold{\pi} π day

π \pi π 可能是最著名的无理数了,人类对 π \pi π 的研究从未停止。目前人类借助计算机已经计算到 π \pi π 小数点后31.4万亿位了!这个记录是由来自Google的日本女程序员岩尾遥创造的。据说该计算程序在25台虚拟机上运行了121天,涉及170TB的数据,最终获得精确到 π \pi π 小数点后31.4万亿位的成绩。

计算 π \pi π 的精度也是衡量计算机算力的一种方法,该方法始于冯·诺依曼。直到今天依然有很多数学家在孜孜不倦地研究 π \pi π 的各种性质,甚至有人认为 π \pi π 小数位蕴含着宇宙的终极奥秘。今天我们用Python将 π \pi π 可视化,看看会诞生什么惊人的图案。

在这里插入图片描述

文章目录

    • 思路
    • 点图
    • 线段图
    • 结论

思路

首先,我从网上下载了 π \pi π 小数点后100万位,保存在文本文件中。每50位一行,数据张这个样子:

14159265358979323846264338327950288419716939937510
58209749445923078164062862089986280348253421170679
82148086513282306647093844609550582231725359408128
48111745028410270193852110555964462294895493038196
44288109756659334461284756482337867831652712019091
45648566923460348610454326648213393607260249141273
72458700660631558817488152092096282925409171536436

然后我会用一定规则来可视化[0-9]这10个数字。目前想到的有两种:

  1. 点图 将[0-9]10个数字,每个数字赋一个颜色,然后一次绘制圆点。

在这里插入图片描述

  1. 线段图 [0-9]10个数字每个数字赋一个颜色和角度,绘制收尾相接的线段。

在这里插入图片描述

点图

点图的绘制相对简单,首先定义颜色:

# 圆点边线颜色
color = ['gold', 'goldenrod', 'red', 'firebrick', 'mediumvioletred', 'darkorchid', 'royalblue', 'lightseagreen', 'mediumseagreen', 'olivedrab']
# 圆点填充颜色
color_fill = ['khaki', 'moccasin', 'lightcoral', 'lightsalmon', 'orchid', 'mediumpurple', 'skyblue', 'aquamarine', 'lightgreen', 'palegreen']

数字[0-9]当作颜色的下标索引获取颜色,绘制单个圆点的代码如下:

def draw_dot(n: int, c: int):
    """ 绘制圆点
    
    :param n: 小数位数值
    :param c: 第几位
    :return: None
    """
    t.color(color_fill[n])
    t.begin_fill()
    t.circle(10)
    t.end_fill()
    t.color(color[n])
    t.circle(10)
    pos = t.pos()

绘制完一个圆点后,turtle移动到下一个位置,这里我设置为每40位换一行:

def move(c: int):
    """ 移动到下一位置

    :param c: 小数点后第几位
    :return: None
    """
    pos = t.pos()
    t.penup()
    if c % 40 == 0: #每40位换一行
        t.goto(-600, pos[1] - 30)
    else:
        t.goto(pos[0] + 30, pos[1])
    t.pendown()

最后我们只要读取 π \pi π 的小数位,循环绘制圆点即可:

import turtle

turtle.setup(1.0, 1.0)
t = turtle.Turtle()
t.hideturtle()
t.pensize(2)
t.penup()
t.goto(-600, 400)
t.pendown()
t.speed(0)

# 绘制整数位3
count = 1
num = 3
draw_dot(num, count)
move(count)

# 循环绘制小数位
with open('圆周率前100万位.txt') as f:
    for i in range(28): # 绘制28*50=1400位
        word = f.readline().strip()
        for a in word:
            num = int(a)
            count += 1
            draw_dot(num, count)
            move(count)
    f.close()
    
turtle.done()

最终效果如下图:

在这里插入图片描述

线段图

有了点图的基础,线段图的绘制相对简单。直接上代码:

import turtle

turtle.setup(1.0, 1.0)
t = turtle.Turtle()
t.hideturtle()
t.pensize(2)
t.pendown()
t.left(90)
t.speed(0)
color = ['gold', 'goldenrod', 'red', 'firebrick', 'mediumvioletred', 'darkorchid', 'royalblue', 'lightseagreen', 'mediumseagreen', 'greenyellow']

# 绘制整数位3
last_num = 3
t.color(color[last_num])
t.right(last_num * 36)
t.forward(40)

# 循环绘制小数位
with open('圆周率前100万位.txt') as f:
    for i in range(100):
        word = f.readline().strip()
        for a in word:
            current_num = int(a)
            t.color(color[current_num])
            angle = (current_num - last_num) * 36
            t.right(angle)
            t.forward(20)
            last_num = current_num
    f.close()

turtle.done()

最终效果:

在这里插入图片描述

结论

怎么样?很神奇吧?如果你有更好的可视化思路,欢迎留言评论交流。

最后,祝大家 π \pi π Day快乐!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/495.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

考研408 王道计算机考研 (初试/复试) 网课笔记总结

计算机初试、复试笔记总结(导航栏)📝 408 考研人,人狠话不多:3、2、1,上链接 ! 408 考研初试 - 备战期,专业课笔记,导航🚥🚥🚥 &…

编写Java哪个编译器好

现在能够编写Java代码的工具简直不要太多,各种各样五花八门,但目前效率最高的还是Intellij Idea。但这个工具对于完全零基础的小白来说,第一次用起来是比较复杂的,因为它的功能太多了。这就好比你要学开车,如果上来就给…

量化(1):基础知识

1. Tops的含义 1TOPS代表处理器每秒可进行一万亿次(10^12)操作 2. 定点数 2.1 定点数的含义 大家都知道,数字既包括整数,又包括小数,如果想在计算机中,既能表示整数,也能表示小数,关键就在于这个小数点如何表示? 计算机科学家们想出一种方法,即约定计算机中小数…

MySQL:JDBC

什么是JDBC? JDBC( Java DataBase Connectivity ) 称为 Java数据库连接 ,它是一种用于数据库访问的应用程序 API ,由一组用Java语言编写的类和接口组成,有了JDBC就可以 用统一的语法对多种关系数据库进行访问,而不用担…

Docker三剑客之swarm

一、什么是docker swarm Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm, 它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker…

排序算法 - 冒泡排序

冒泡排序算法应该可以说是很经典的一种对数据进行排序的的算法了,甚至在很多的介绍算法的数据中,它可能还是放在最前面开始讲解的。 冒泡排序算法到底是咋样的呢?冒泡这个说法又是怎么得来的呢? 首先先理解一下冒泡算法的实现原理…

Java开发 - 布隆过滤器初体验

目录 前言 布隆过滤器 什么是布隆过滤器 布隆过滤器的作用 布隆过滤器原理 怎么设计布隆过滤器 布隆过滤器使用案例 安装布隆过滤器 添加依赖 添加配置 添加工具类 添加测试代码 简单测试 特别提醒​​​​​​​ 结语 前言 前面三篇,已经把消息队列…

裸辞3个月,面试了25家公司,终于找到心仪的工作了

​上半年裁员,下半年裸辞,有不少人高呼裸辞后躺平真的好快乐!但也有很多人,裸辞后的生活五味杂陈。 面试25次终于找到心仪工作 因为工作压力大、领导PUA等各种原因,今年2月下旬我从一家互联网小厂裸辞,没…

蓝桥杯刷题第九天

题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。素数就是不能再进行等分的整数。比如7,11。而 9 不是素数,因为它可以平分为 3 等份。一般认为最小的素数是2,接着是 3,5&…

深度学习面试题汇总(一)

深度学习面试题汇总(一) 文章目录深度学习面试题汇总(一)1.Dropout1.1Dropout在训练的过程中会随机去掉神经元,那么在编码过程中是怎么处理的呢?1.2dropout的训练过程需要做rescale,这个过程是什…

Candence PCB Si 仿真设计篇3:板级链路仿真

接上篇Candence PCB Si 仿真设计篇2;提示仿真链路中无VIA过孔仿真模型,可手动添加VIA过孔仿真模型; 1.添加过孔VIA仿真模型. 在SigXplorer PCB SI GXL界面中,菜单栏Analyze->Via Model Generator弹出设置VIA模型设置&#xf…

VR全景城市,用720全景树立城市形象,打造3D可视化智慧城市

随着城市化进程的加速,城市之间的竞争也日益激烈。城市管理者们需要寻求新的方式来提升城市的品牌形象和吸引力。在这个过程中,VR全景营销为城市提供了一种全新的营销手段,可以帮助提升城市的价值和吸引力。一、城市宣传新方式VR全景营销是一…

自学大数据第八天~HDFS命令(二)

嗨喽,好久不见,最近抽空复习了一下hadoop,书读百遍,其意自现这句话还真是; 继续学习HDFS常用命令 改变文件 拥有者~chown hdfs dfs -chown -R hadoop /user/hadoop使用 -R 将使改变在目录结构下递归进行。命令的使用者必须是超级用户。 改变文件所属组-chgrp hdfs dfs -chgr…

Swing开发教程从入门到实践(一)

文章目录开发工具设置实战示例自定义组件常用组件总览JFrameJDialogJPanelLayout布局高级扩展扩展皮肤FlatLafweblaf扩展组件自定义组件SwingX打包部署打包成可执行Jar打包成成品参考开发工具 传统套件IDEAUI Designer。 UI Designer是一个idea插件,可以帮助我们通…

tailwind和bootstrap对比优劣有哪些,给前端开发者的一些建议

一、概述Tailwind和Bootstrap是两种流行的CSS框架,它们都提供了快速、易用的CSS类库来帮助前端开发者构建出现代化的网站和应用程序。它们有一些相似之处,但也有很多不同的优势和劣势。二、对比Tailwind的优势:1.自定义程度更高: Tailwind提供的所有CSS类…

【数论】最大公约数、约数的个数与约数之和定理

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

朋友去华为面试,轻松拿到26K的Offer,羡慕了......

最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…

java面试八股文之------Java并发夺命23问

java面试八股文之------Java并发夺命23问👨‍🎓1.java中线程的真正实现方式👨‍🎓2.java中线程的真正状态👨‍🎓3.如何正确停止线程👨‍🎓4.java中sleep和wait的区别👨‍…

【STC15单片机】 超声波模块的使用

目录 1 基于STC15F2K60S2的超声波测距代码 1.1 基本注意事项 1.1.1 跳线帽接法 1.1.2 晶振设置 1.2 板载超声波工作原理 1.2.1 原理总结 1.2.2 超声波代码思路 1.3 STC15单片机代码部分 1.3.1 定时器0&定时器1初始化 1.3.2 超声波ultrasonic.c ultrasonic.h文件配…

C++修炼之练气期第八层——内联函数

文章目录 一、宏的缺点 引例 改正一 改正二 改正三 宏的缺陷 二、内联函数的概念 三、内联与非内联的区别 四、内联函数的特性 专栏导读 🌸作者简介:花想云,在读本科生一枚,致力于 C/C、Linux 学习。 🌸本文收…
最新文章