书的作者
 
文章目录
- 思维导图
 - 使用到的函数
 - 几何的介绍(略)
 - 点线面和定义
 - 欧几里得几何原本的公理
 - 正多边形
 - 代码:如何绘制正多边形
 
- 三维的几何体
 - 柏拉图立体
 - 几何变换
 
- 角度和弧度
 - 角度
 - 弧度
 - 正负角(相位)
 - 三个角
 
- 勾股定理到三角函数
 - 勾股定理
 - 三角函数
 - 反三角函数
 - 余弦定理
 - 代码:
 - 三角函数
 - 反三角函数
 - 余弦定理求边
 - 余弦定理求角
 
- 圆周率割圆术
 - 阿基米德的方法
 
思维导图

使用到的函数

几何的介绍(略)

 
点线面和定义

 
 
 等高线比较重要,应用多
 曲线的切线使用极限和微积分工具来解
 
 
欧几里得几何原本的公理


正多边形

代码:如何绘制正多边形
import matplotlib.pyplot as plt
from matplotlib.patches import RegularPolygon, Circle
import numpy as np
for num_vertices in [3,4,5,6,7,8]:
    
    #创建几个子图
    fig, ax = plt.subplots()
    
    ax.set_aspect('equal')
    #使x和y的长度相同
    #规则正多边形使用。RegularPolygon创建具有指定顶点数的正六边形,并将其添加到坐标轴中。设置半径、不透明度和边缘颜色。
    hexagon_inner = RegularPolygon((0,0), numVertices=num_vertices, 
                                   radius=1, alpha=0.2, edgecolor='k')
    
    # RegularPolygon,matplotlib中还有Rectangle,Circle,Arrow等各种补丁对象
    #将补丁对象输出到对应的轴
    ax.add_patch(hexagon_inner)
    
    plt.axis('off')
    
    plt.xlim(-1.5,1.5)
    plt.ylim(-1.5,1.5)
    plt.show()
 
三维的几何体

柏拉图立体

 
几何变换
在函数变换、线性变换、多元高斯分布等话题中用到几何变换。
 
 投影
 这个概念可以进行一定的泛化。
 
角度和弧度
角度

弧度

正负角(相位)

三个角

勾股定理到三角函数
勾股定理

 
三角函数

 
反三角函数

余弦定理

代码:
三角函数
import math
# 输入角度(单位:度)
angle_deg = 45
# 将角度转换为弧度
angle_rad = math.radians(angle_deg)
# 计算三角函数
sin_val = math.sin(angle_rad)  # 正弦
cos_val = math.cos(angle_rad)  # 余弦
tan_val = math.tan(angle_rad)  # 正切
print(f"Sin({angle_deg}°) = {sin_val}")
print(f"Cos({angle_deg}°) = {cos_val}")
print(f"Tan({angle_deg}°) = {tan_val}")
 
反三角函数
# 已知正弦值
sin_val = 0.707
# 计算反三角函数
angle_rad_asin = math.asin(sin_val)  # 反正弦
angle_deg_asin = math.degrees(angle_rad_asin)  # 弧度转换为角度
print(f"Asin({sin_val}) = {angle_deg_asin}°")
 
使用numpy
import numpy as np
# 假设我们有一个数组表示正弦、余弦、正切值
sin_values = np.array([0.5, 0.707, 1.0])
cos_values = np.array([0.866, 0.707, 0.0])
tan_values = np.array([0.577, 1.0, np.inf])  # np.inf 表示正切值无穷大(90度)
# 反正弦
asin_values = np.degrees(np.arcsin(sin_values))  # 结果是弧度,转换为角度
print("Arcsin values (in degrees):", asin_values)
# 反余弦
acos_values = np.degrees(np.arccos(cos_values))  # 结果是弧度,转换为角度
print("Arccos values (in degrees):", acos_values)
# 反正切
atan_values = np.degrees(np.arctan(tan_values))  # 结果是弧度,转换为角度
print("Arctan values (in degrees):", atan_values)
 
在 numpy 中,你可以使用 numpy 模块来计算反三角函数。numpy 提供了与 math 模块类似的函数,支持数组操作和批量计算,非常适合处理大量数据。
Arcsin values (in degrees): [30.      45.00001764 90.     ]
Arccos values (in degrees): [ 30.      45.00001764  90.     ]
Arctan values (in degrees): [30.00000083 45.         90.        ]
 
np.arcsin()和np.arccos()的输入值必须在[-1, 1]之间,因为这些是正弦和余弦的值域。np.arctan()没有这种限制,任何实数都可以作为输入。- 结果默认是以弧度表示的,如果需要角度,可以使用 
np.degrees()将弧度转换为角度。 
这样,你就可以使用 numpy 批量计算反三角函数,非常适合大规模数据处理。
余弦定理求边
c 2 = a 2 + b 2 − 2 a b ⋅ cos  ( θ ) c^2=a^2+b^2-2ab\cdot\cos(\theta) c2=a2+b2−2ab⋅cos(θ)
def cosine_law(a, b, angle_deg):
    # 将角度转换为弧度
    angle_rad = math.radians(angle_deg)
    # 计算 c 的长度
    c = math.sqrt(a**2 + b**2 - 2 * a * b * math.cos(angle_rad))
    return c
# 示例:已知 a=5, b=7, 夹角为60度,求 c
a = 5
b = 7
angle_deg = 60
c = cosine_law(a, b, angle_deg)
print(f"Using the cosine law, c = {c}")
 
余弦定理求角
cos  ( θ ) = a 2 + b 2 − c 2 2 a b \cos(\theta)=\frac{a^2+b^2-c^2}{2ab} cos(θ)=2aba2+b2−c2
def cosine_law_angle(a, b, c):
    # 计算夹角的余弦值
    cos_theta = (a**2 + b**2 - c**2) / (2 * a * b)
    # 计算角度(弧度)
    angle_rad = math.acos(cos_theta)
    # 将弧度转换为角度
    angle_deg = math.degrees(angle_rad)
    return angle_deg
# 示例:已知 a=5, b=7, c=8,求夹角
a = 5
b = 7
c = 8
theta_deg = cosine_law_angle(a, b, c)
print(f"Angle between a and b is {theta_deg}°")
 
圆周率割圆术

 内接和外切正多边形的圆形逼近
 
import matplotlib.pyplot as plt
from matplotlib.patches import RegularPolygon, Circle
import numpy as np
# 循环遍历num_vertices的值
for num_vertices in [6,8,10,12,14,16]:
    
    # 创建一个图形和坐标轴
    fig, ax = plt.subplots()
    ax.set_aspect('equal')
    
    # 创建一个内六边形,num_vertices为边数,radius为半径,alpha为透明度,edgecolor为边框颜色
    hexagon_inner = RegularPolygon((0,0), numVertices=num_vertices, 
                                   radius=1, alpha=0.2, edgecolor='k')
    #Patch是多边形对象
    ax.add_patch(hexagon_inner)
    
    # 创建一个外六边形,num_vertices为边数,radius为半径,alpha为透明度,edgecolor为边框颜色
    hexagon_outer = RegularPolygon((0,0), numVertices=num_vertices, 
                                   radius=1/np.cos(np.pi/num_vertices), 
                                   alpha=0.2, edgecolor='k')
    ax.add_patch(hexagon_outer)
    
    # 创建一个圆形,radius为半径,facecolor为填充颜色,edgecolor为边框颜色
    circle = Circle((0,0), radius=1, facecolor = 'none', edgecolor='k')
    ax.add_patch(circle)
    
    # 关闭坐标轴
    plt.axis('off')
    
    # 设置坐标轴范围
    plt.xlim(-1.5,1.5)
    plt.ylim(-1.5,1.5)
    
    # 显示图形
    plt.show()
 

关键代码:内切多边形和外切多边形的R怎么计算的
 
 
 此处类似于三角函数的那个基础等价代换的推导和逼近。
 不等式,在无穷处逼近
 周长的逼近
 
 
import numpy as np
import matplotlib.pyplot as plt
#生成x
n_start = 6
n_stop  = 50
n_array = np.linspace(n_start,n_stop,n_stop-n_start + 1)
#两个估计的边界,此处直接使用向量的乘法
pi_lower_b = np.sin(np.pi/n_array)*n_array
pi_upper_b = np.tan(np.pi/n_array)*n_array
fig, ax = plt.subplots()
#平行于x的线
plt.axhline(y=np.pi, color='r', linestyle='-')
#两个曲线
plt.plot(n_array,pi_lower_b, color = 'b')
plt.plot(n_array,pi_upper_b, color = 'g')
#填充
plt.fill_between(n_array, pi_lower_b, pi_upper_b, color = '#DEEAF6')
plt.tight_layout()
plt.xlabel('Number of sides, n')
plt.ylabel('Estimate of $\pi$')
 
阿基米德的方法

  
      
       
        
        
          t 
         
        
          a 
         
        
          n 
         
        
          ( 
         
        
          α 
         
        
          / 
         
        
          2 
         
        
          ) 
         
        
          = 
         
        
          s 
         
        
          i 
         
        
          n 
         
        
          α 
         
        
          / 
         
        
          ( 
         
        
          1 
         
        
          + 
         
        
          c 
         
        
          o 
         
        
          s 
         
        
          α 
         
        
          ) 
         
        
          = 
         
        
          ( 
         
        
          1 
         
        
          − 
         
        
          c 
         
        
          o 
         
        
          s 
         
        
          α 
         
        
          ) 
         
        
          / 
         
        
          s 
         
        
          i 
         
        
          n 
         
        
          α 
         
        
       
         tan(\alpha/2)=sin\alpha/(1+cos\alpha)=(1-cos\alpha)/sin\alpha 
        
       
     tan(α/2)=sinα/(1+cosα)=(1−cosα)/sinα
 可证明下式成立
 
 
import numpy as np
import matplotlib.pyplot as plt
n_start = 6
B_6 = np.sin(np.pi/n_start)*n_start
A_6 = np.tan(np.pi/n_start)*n_start
#列表
B_array = []
A_array = []
n_array = [6,12,24,48,96]
B_i = B_6
A_i = A_6
n_i = n_start
for i in n_array:
    
    B_array.append(B_i)
    A_array.append(A_i)
    
    # updating
    A_i = 2*A_i*B_i/(A_i + B_i)
    B_i = np.sqrt(A_i*B_i)
#转换为np数组
B_array = np.array(B_array)
A_array = np.array(A_array)
n_array = np.array(n_array)
fig, ax = plt.subplots()
plt.axhline(y=np.pi, color='r', linestyle='-')
plt.plot(n_array,B_array, color = 'b', marker = 'x')
plt.plot(n_array,A_array, color = 'g', marker = 'x')
plt.fill_between(n_array, B_array, A_array, color = '#DEEAF6')
plt.tight_layout()
plt.xticks([6,12,24,48,96])
plt.xlim((6,96))
plt.xlabel('Number of sides, n')
plt.ylabel('Estimate of $\pi$')
plt.show()
 




















