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

书的作者

文章目录

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

思维导图

在这里插入图片描述

使用到的函数

在这里插入图片描述

几何的介绍(略)

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

点线面和定义

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

欧几里得几何原本的公理

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

正多边形

在这里插入图片描述

代码:如何绘制正多边形

import matplotlib.pyplot as plt
from matplotlib.patches import RegularPolygon, Circle
import numpy as npfor 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_arrayfig, 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 pltn_start = 6B_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_startfor i in n_array:B_array.append(B_i)A_array.append(A_i)# updatingA_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.xdnf.cn/news/1553261.html

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

相关文章

算法笔记(五)——分治

文章目录 算法笔记(五)——分治快排颜色分类排序数组数组中的第K个最大元素库存管理 III 归并排序数组交易逆序对的总数计算右侧小于当前元素的个数翻转对 算法笔记(五)——分治 分治算法字面上的解释是“分而治之”,就…

绘制随k变化的等熵面积比公式

xmax 4; Ma 0.1:0.05:xmax; figure; hold on; xlim([0,xmax]); ylim([0,10]);% 预定义k值的向量 k_values 1.2:0.1:1.4;% 创建一个细胞数组来存储图例标签 legendStrings cell(1, length(k_values));% 绘制每条曲线并记录图例标签 lines []; for idx 1:length(k_values)k…

LabVIEW自动生成NI-DAQmx代码

在现代数据采集和控制系统中,LabVIEW被广泛应用于各种工业和科研领域。其中,NI-DAQmx是一个强大的驱动程序,可以帮助用户高效地管理和配置数据采集任务。本文将介绍如何在LabVIEW中通过DAQ Assistant Express VI和任务常量自动生成NI-DAQmx代…

【leetcode】 45.跳跃游戏 ||

如果我们「贪心」地进行正向查找,每次找到可到达的最远位置,就可以在线性时间内得到最少的跳跃次数。 例如,对于数组 [2,3,1,2,4,2,3],初始位置是下标 0,从下标 0 出发,最远可到达下标 2。下标 0 可到达的…

2024最新的软件测试面试大全(含答案+文档)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、软件测试基础面试题 1、阐述软件生命周期都有哪些阶段? 常见的软件生命周期模型有哪些? 软件生命周期是指一个计算机软件从功能确定设计,到…

【YOLO目标检测行人与车数据集】共5607张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式:YOLO格式 图片数量:5607 标注数量(txt文件个数):5607 标注类别数:2 标注类别名称:person、car 数据集下载:行人与车数据集 图片示例 数据集图片: …

JAVA基础语法 Day11

一、Set集合 Set特点:无序(添加数据的顺序和获取出的数据顺序不一致),不重复,无索引 public class demo1 {public static void main(String[] args) {//1.创建一个集合//HashSet特点:无序,不重…

Linux高级编程_27_系统调用

文章目录 系统调用函数分类系统编程概述系统调用概述**类UNIX系统的软件层次** 用户态和内核态系统调用与库函数的关系文件操作符概述文件磁盘权限 系统调用之文件操作open:打开文件close:关闭文件write:写入read:读取 文件状态fcntl 函数stat 函数 st_mode的值示例 1&#xff…

synchronized底层是怎么通过monitor进行加锁的?

一、monitor是什么 monitor叫做对象监视器、也叫作监视器锁,JVM规定了每一个java对象都有一个monitor对象与之对应,这monitor是JVM帮我们创建的,在底层使用C实现的。 ObjectMonitor() {_header;_count ; // 非常重要,表示锁计数…

【论文速看】DL最新进展20241002-自动驾驶、自监督学习、扩散模型、多模态与图像分割

目录 【自动驾驶】【自监督学习】【扩散模型】【多模态与图像分割】 【自动驾驶】 [轨迹预测] CASPFormer: Trajectory Prediction from BEV Images with Deformable Attention 论文链接:https://arxiv.org/pdf/2409.17790 代码链接:无 运动预测是自动…

基于深度学习的乳腺癌分类识别与诊断系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 乳腺癌是全球最常见的癌症之一,早期诊断对于治疗效果至关重要。近年来,深度学习技术在医学图像分析领域取得了显著进展,能够从大量的医学影像数据中自动学习和提…

[动态规划] 二叉树中的最大路径和##树形DP#DFS

标题:[动态规划] 二叉树中的最大路径和##树形DP#DFS 个人主页水墨不写bug (图片来源于网络) 目录 一 、什么是树形DP 二、题目描述(点击题目转跳至题目) NC6 二叉树中的最大路径和 算法思路: 讲解与参考代…

建筑业挂靠行为的防范建议

在建筑行业中,挂靠行为的普遍存在给许多企业带来了法律风险和信誉风险。为了防范这些风险,企业需要采取一系列有效的措施。 一、加强资质管理 企业应当通过合法途径获取和提升自身的资质等级,避免因资质不足而产生挂靠的需求。加强资质管理是…

Python从入门到高手4.2节-掌握循环控制语句

目录 4.2.1 理解循环控制 4.2.2 for循环结构 4.2.3 循环结构的else语句 4.2.4 while循环结构 4.2.5 循环结构可以嵌套 4.2.6 国庆节吃好玩好 4.2.1 理解循环控制 我们先来搞清楚循环的含义。以下内容引自汉语词典: 循环意指往复回旋,指事物周而复始地运动或变…

html+css+js实现Collapse 折叠面板

实现效果&#xff1a; HTML部分 <div class"collapse"><ul><li><div class"header"><h4>一致性 Consistency</h4><span class"iconfont icon-jiantou"></span></div><div class"…

Linux中的进程间通信之共享内存

共享内存 共享内存示意图 共享内存数据结构 struct shmid_ds {struct ipc_perm shm_perm; /* operation perms */int shm_segsz; /* size of segment (bytes) */__kernel_time_t shm_atime; /* last attach time */__kernel_time_t shm_dtime; /* last detach time */__kerne…

【Java】—— 集合框架:List接口常用方法与List接口的实现类

目录 4. Collection子接口1&#xff1a;List 4.1 List接口特点 4.2 List接口方法 4.3 List接口主要实现类&#xff1a;ArrayList 4.4 List的实现类之二&#xff1a;LinkedList 4.5 List的实现类之三&#xff1a;Vector 4.6 练习 4. Collection子接口1&#xff1a;List …

【Docker】docker的存储

介绍 docker存储主要是涉及到3个方面&#xff1a; 第一个是容器启动时需要的镜像 镜像文件都是基于图层存储驱动来实现的&#xff0c;镜像图层都是只读层&#xff0c; 第二个是&#xff1a; 容器读写层&#xff0c; 容器启动后&#xff0c;docker会基于容器镜像的读层&…

【python实操】python小程序之随机抽签以及for循环计算0-x的和

引言 python小程序之随机抽签以及for循环计算0-x的和 文章目录 引言一、随机抽签1.1 题目1.2 代码1.3 代码解释 二、for循环计算0-x的和2.1 题目2.2 代码2.3 代码解释 三、思考3.1 随机抽签3.2 for循环计算0-x的和 一、随机抽签 1.1 题目 使用input输入五个同学的名字随机抽取…

C++(Qt)软件调试---内存调试器Dr.Memory(21)

C(Qt)软件调试—内存调试器Dr. Memory&#xff08;21&#xff09; 文章目录 C(Qt)软件调试---内存调试器Dr. Memory&#xff08;21&#xff09;[toc]1、概述&#x1f41c;2、安装Dr.Memory&#x1fab2;3、命令行使用Dr.Memory&#x1f997;4、Qt Creator集成使用Dr.Memory&…