中国古代数学家刘徽在整理数学著作《九章算术》时发现,所谓的“周三径一”,实质上是把圆的内接正六边形的周长作为圆的周长,这显然不够精确,于是他想到用圆的内接正十二边形边形、二十四边形、四十八边形、九十六边形……的周长作为圆的周长,会比使用内接正六边形的周长作为圆的周长更精确。
刘徽在求圆周率时用到了这个方法,用来计算圆的周长,当内接正多边形的面积与圆的面积非常相近时,内接正多边形的周长就可以表示圆的周长,这个方法也称为割圆术。割圆术是用圆内接正多边形的面积去无限逼近圆面积,并以此求圆周长的方法。
具体计算过程为:
设有一圆,首先做内接正六边形,把它的面积记为A1;再做正十二边形,其面积记为A2;再做正二十四边形,其面积记为A3;循环下去,每次边数都加倍,一般把内接正6*2^(n-1)边形的面积记为An,这样就会得到一系列的面积:
A1,A2,A3,……,An
随着n的增大,圆内接正多边形的面积愈来愈接近于圆的面积,作为圆面积的近似值也越来越精确,但无论n取如何大的值,An的面积只是近似于圆的面积,而不是圆的面积。
设想一下,若n无限增大,An的面积无限接近于圆,An也逐渐趋向于一确定的数值,这个确定的数值可以理解为圆的面积,这个确定的数值也称为A1,A2,A3,……,An序列中,当n趋向于无穷大时的极限。
一幅图胜过千言万语,要理解割圆术与极限思想,可以编写一个Python程序,来动态展示圆内接正多边形边数不断增大时,内接正多边形的面积逼近圆面积的过程。
例1 圆内接正多边形边数不断增大时,逼近圆面积动态图
案例代码见课程资源(unit1/case14.py)
import numpy as np
import matplotlib.pyplot as plt
# 导入matplotlib库的交互组件
from matplotlib.widgets import Slider,Button
# 绘制内接正多边形
# r:半径 sidenum:正多边形边数
def polygon(r,sidenum):
# 0~360范围内均匀创建sidenum个数据点
data = np.linspace(0,2*np.pi,sidenum,False)
# 计算边数为sidenum正多边形顶点x坐标
x = r * np.sin(data)
# 正多边形顶点首尾相连
x = np.append(x,x[0])
# 计算边数为sidenum正多边形顶点y坐标
y = r * np.cos(data)
# 正多边形顶点首尾相连
y = np.append(y,y[0])
return (x,y)
# 绘制正多边形的外接圆
def circle(r):
# 0~360范围内均匀创建200个数据点
data = np.linspace(0, 2 * np.pi, 200)
# 计算圆周点x坐标
x = r * np.cos(data)
# 计算圆周点y坐标
y = r * np.sin(data)
return (x,y)
# 程序入口
if __name__ == '__main__':
# 调整绘图区域,让底部容纳Slider组件
plt.subplots_adjust(bottom=0.25)
# 获取正多边边形数据
# r:20 sidenum:6
x,y = polygon(20,6)
# 绘制正多边形
# plot函数返回存储Line2D绘图实例对象的列表
figure, = plt.plot(x,y,color='blue',linewidth=1.5,label='polygon')
# 获取正多边形外接圆数据
# r:20
x1,y1 = circle(20)
# 绘制正多边形外接圆
plt.plot(x1,y1,color='r',linestyle='-')
plt.plot(x1,-y1,color='r',linestyle='-')
# 绘制圆心
plt.scatter(0,0,c='r',marker='o')
# 调整坐标轴,使坐标轴各轴数据单位相同
plt.axis("equal")
# 设置Slider组件绘图区域
s_area = plt.axes([0.1,0.1,0.75,0.03])
# 创建Slider组件
slider_control = Slider(s_area,'slider',0,30,6)
# 定义更新绘图函数
def update(var):
# 获取slider_control的当前数值
num = int(slider_control.val)
# 获取正多边形数据
x,y = polygon(20,num)
# 设置Line2D绘图实例对象的数据
figure.set_data(x,y)
# 按照设置的数据绘制正多边形
plt.draw()
# 绑定Slider组件on_changed事件
slider_control.on_changed(update)
plt.show()
圆内接正多边形为6条边的效果图。圆内接正多边形的面积和圆的面积还是有很大差距的。

圆内接正多边形为12条边的效果图。观察图像可以发现,内接正多边形的面积离圆的面积愈来愈近了。

圆内接正多边形为24条边的效果图。内接正多边形的面积几乎和圆的面积重合了。

圆内接正多边形为48条边的效果图。仔细观察图像,还稍微能看出正多边形的痕迹,在这种情况下,内接正多边形的面积已经非常逼近圆的面积了。

圆内接正多边形为96条边的效果图,几乎看不到内接正多边形的痕迹了。

从割圆术可以理解极限思想,极限是一个动态逼近的过程,从内接正六边形到内接正九十六边形,再到内接正n边形,内接正多边形的面积随着边数的不断增大,会愈来愈近似于圆的面积,在经过无限增大过程后,多边形就会变换为圆,多边形面积便转化为圆面积。