零基础学编程041:欧拉公式的几何意义

欧拉公式号称是最美的出自上帝之手的数学公式,即

,这个公式里 eπ 都是无理数,i 是 -1 的平方根,是一个虚数,0和1是最简单的整数,欧拉公式把它们联系在一起。

下面我们来理解一下它的几何含义,并用Python中的小海龟把它画出来。

利用级数展开的公式可以有下面的推导过程:

因为这个数列中含有虚数 i,所以可以把上面的每一项看作是复平面上的一个向量。

第0项:1,表示从(0, 0)点出发沿x轴前进1个单位。

第1项: ,把其中的 i 理解为逆时针旋转90度,这样就是在垂直方向上前进 π 个单位。

第2项,再旋转90度,前进 (π*π / 2) 个单位。

……

最后这个无数级数的和为(-1),表示最后逼近(-1, 0)这个点。神秘的欧拉公式的几何含义就是这么简单!

用小海龟画出欧拉公式的几何含义

先复习一下《零基础学编程014:小海龟做画》这一课中的画图基本命令:

import turtle
turtle.forward(100) # 前进100个单位
turtle.left(90) # 左转90度

第0项:

turtle.forward(1) 

第1项,这里用到了数学包math中的pi,你不用写3.1415926了:

turtle.left(90)
turtle.forward(math.pi) 

第2项,还记得运算符 ** 是什么意思吧?

turtle.left(90)
turtle.forward((math.pi ** 2) / 2) 

第3项,分母是3的阶乘,需要用到数学函数math.factorial():

turtle.left(90)
turtle.forward((math.pi ** 3) / math.factorial(3)) 

现在我们已经找到规律了,假设我们循环16次,就是range(1,17),每一层的循环只需要执行这两步就可以了:

for i in range(1,17) :
    turtle.left(90)
    turtle.forward((math.pi ** i) / math.factorial(i))

这里小海龟的默认画布是以像素为单位的,前进1、2个像素看不出效果,需要把画布的坐标范围设置一下,在图形世界里称为世界坐标系。下面的语句表示画布的左下角坐标是(-5,-5),右上角坐标是(5,5):

setworldcoordinates(-5, -5, 5, 5)

最后的代码是这样的:

import turtle
import math

setworldcoordinates(-5, -5, 5, 5)
turtle.forward(1) 
for i in range(1,17) :
    turtle.left(90)
    turtle.forward((math.pi ** i) / math.factorial(i))

我加上了坐标系和两个参考点,最后的图形是这样的:

小海龟从原点出发,每走一次,左转90度,很快就收敛到(-1, 0)这一点。

--- END ---

原文发布于微信公众号 - 申龙斌的程序人生(slbGTD)

原文发表时间:2017-04-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开发与安全

算法:最短路径之弗洛伊德(Floyd)算法

为了能讲明白弗洛伊德(Floyd)算法的主要思想,我们先来看最简单的案例。图7-7-12的左图是一个简单的3个顶点的连通网图。 ? 我们先定义两个二维数组D[3...

3446
来自专栏java闲聊

JDK1.8 ArrayList 源码解析

当运行 ArrayList<Integer> list = new ArrayList<>() ; ,因为它没有指定初始容量,所以它调用的是它的无参构造

1192
来自专栏聊聊技术

原 数据结构-红黑树(Red-Black

3489
来自专栏计算机视觉与深度学习基础

Leetcode 114 Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example, Given...

1948
来自专栏聊聊技术

原 数据结构-二叉搜索树(Binary S

2887
来自专栏xingoo, 一个梦想做发明家的程序员

20120918-向量实现《数据结构与算法分析》

#include <iostream> #include <list> #include <string> #include <vector> #include...

1726
来自专栏聊聊技术

原 初学图论-Kahn拓扑排序算法(Kah

2878
来自专栏MelonTeam专栏

ArrayList源码完全分析

导语: 这里分析的ArrayList是使用的JDK1.8里面的类,AndroidSDK里面的ArrayList基本和这个一样。 分析的方式是逐个API进行解析 ...

4519
来自专栏desperate633

LeetCode Invert Binary Tree题目分析

Invert a binary tree. 4 / \ 2 7 / \ / \1 3 6 9 to4 / \ 7 2 / \ / \9 6 3 1 Tri...

861
来自专栏Phoenix的Android之旅

Java 集合 Vector

List有三种实现,ArrayList, LinkedList, Vector, 它们的区别在于, ArrayList是非线程安全的, Vector则是线程安全...

672

扫码关注云+社区