鸢尾花书实践和知识记录[数学要素3-3几何]

news2024/12/28 21:01:36

书的作者

文章目录

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

思维导图

在这里插入图片描述

使用到的函数

在这里插入图片描述

几何的介绍(略)

在这里插入图片描述
在这里插入图片描述

点线面和定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
等高线比较重要,应用多
曲线的切线使用极限和微积分工具来解
在这里插入图片描述
在这里插入图片描述

欧几里得几何原本的公理

在这里插入图片描述在这里插入图片描述

正多边形

在这里插入图片描述

代码:如何绘制正多边形

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+b22abcos(θ)

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+b2c2

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α)=(1cosα)/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()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL优化实战 解决CPU100%

问题表象 在24年初有一个日经问题困扰着我们,每到正点03分DB的CPU开始打满,持续1分钟又恢复正常水平。但由于日常业务交付压力较大且权限限制没有登录DB主机的权限,大家也就得过且过一直没有去认真排查。直到某天我来兴趣了也有时间了&#…

【Kubernetes】常见面试题汇总(五十一)

目录 114. K8S 集群服务访问失败(情况一)? 115. K8S 集群服务访问失败(情况二)? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一&#xff…

严重 Zimbra RCE 漏洞遭大规模利用(CVE-2024-45519)

攻击者正在积极利用 CVE-2024-45519,这是一个严重的 Zimbra 漏洞,该漏洞允许他们在易受攻击的安装上执行任意命令。 Proofpoint 的威胁研究人员表示,攻击始于 9 月 28 日,几周前,Zimbra 开发人员发布了针对 CVE-2024-…

TCP/UDP初识

TCP是面向连接的、可靠的、基于字节流的传输层协议。 面向连接:一定是一对一连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端…

Java项目实战II基于Java+Spring Boot+MySQL的甘肃非物质文化网站设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者 一、前言 甘肃省作为中国历史文化名省,拥有丰富的非物质文化遗产资源,涵盖表演艺术、手…

计算机网络期末复习真题(附真题答案)

前言: 本文是笔者在大三学习计网时整理的笔记,哈理工的期末试题范围基本就在此范畴内,就算真题有所更改,也仅为很基础的更改数值,大多跑不出这些题,本文包含简答和计算等大题,简答的内容也可能…

基于SSM的宿舍管理系统 (源码+定制+文档)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

华硕天选笔记本外接音箱没有声音

系列文章目录 文章目录 系列文章目录一.前言二.解决方法第一种方法第二种方法 一.前言 华硕天选笔记本外接音箱没有声音,在插上外接音箱时,系统会自动弹出下图窗口 二.解决方法 第一种方法 在我的电脑上选择 Headphone Speaker Out Headset 这三个选项…

VSCode python代码颜色调整与pycharm对齐

今天开始用VSCode写代码了,因为用服务器比较方便,可是进去一看,代码花花绿绿地完全看不进去,以前用Pycharm的时候就完全没有这种问题,看看人家的颜色格式!(当然也可能是先入为主) 因…

Android SystemUI组件(09)唤醒亮屏 锁屏处理流程

该系列文章总纲链接:专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明: 说明:本章节持续迭代之前章节的思维导图,主要关注左侧上方锁屏分析部分 唤醒亮屏 即可。 Power按键的处理逻辑最终是由PhoneWindowManager来…

Leecode刷题之路第六天之Z字形变换

题目出处 06-Z字形变换 题目描述 个人解法 思路: todo 代码示例:(Java) todo复杂度分析 todo 官方解法 06-Z字形变换官方解法 方法1:利用二维矩阵模拟 思路: 代码示例:(Java&am…

Microsoft 更新 Copilot AI,未來將能使用語音並看到你瀏覽的網頁

不過受到 Recall 事件的影響,更新的推出將更緩慢謹慎。 Microsoft 也同步對其網頁版及行動版的 Copilot AI 進行大改版。這主要是為網頁版換上了一個較為簡單乾淨的介面,並增加了一些新的功能,像是 Copilot Voice 能讓你與 AI 助手進行對話式…

Ansible Playbook原理与实践(Principles and Practice of Ansible Playbook)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

环绕航线规划软件,适配大疆御3e、M300/350适用大疆机型: 经纬M300 rtk、M350rtk、御3e等行业机,能支持kml,㎞z导入。

环绕航线规划软件,适配大疆御3e、M300/350 适用大疆机型: 经纬M300 rtk、M350rtk、御3e等行业机,能支持kml,㎞z导入。 环绕航线规划软件介绍 名称 环绕航线规划软件 (Orbit Flight Planning Software) 适用机型 大疆经纬 M300 RTK大疆经纬 M350 RTK大疆御 3E 行业机功能特…

【技术详解】SpringMVC框架全面解析:从入门到精通(SpringMVC)

文章目录 【技术详解】SpringMVC框架全面解析:从入门到精通(SpringMVC)SpringMVC概述1. 三层架构与MVC架构区别1.1 三层架构1.2 MVC架构1.3前后端分离开发模式 2. SpringMVC环境搭建2.1 注解启动方式2.2 xml启动方式2.3 SpringMVC PostMan工具使用 3. SpringMVC 请求…

electron出现乱码和使用cmd出现乱码

第一种出现乱码。这种可以通过chcp 65001,设置为utf-8的编码。第二种,是执行exec的时候出现乱码,这个时候需要设置一些编码格式,可以通过iconv-lite进行解决,这个方法是node自带的,所以不需要导入。使用方法…

scrapy爬取汽车、车评数据【上】

这个爬虫我想分三期来写: ✅ 第一期写如何爬取汽车的车型信息; ✅ 第二期写如何爬取汽车的车评; ✅ 第三期写如何对车评嵌入情感分析结果,以及用简单的方法把数据插入mysql中; 技术基于scrapy框架、BERT语言模型、mysq…

【springboot】整合沙箱支付

目录 1. 配置沙箱应用环境2. 配置springboot项目1. 引入依赖2. 配置文件注册下载ngrok 3. 创建支付宝支付服务类4. 支付界面模板5. 控制类实现支付6. 测试 1. 配置沙箱应用环境 使用支付宝账号登录到开放平台控制台。 使用支付宝登录后,看到以下页面,下…

2、.Net 前端框架:OpenAuth.Net - .Net宣传系列文章

OpenAuth.Net 是一个开源的身份验证框架,由开发者 Yubaolee 创建,它旨在简化 Web 应用和服务的安全授权过程。这个框架以其强大的功能和易用性,为开发人员提供了一种高效的方式来处理用户认证和授权问题。 OpenAuth.Net 的关键特性包括&#…