【学习笔记】计算几何

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

基础知识

向量

概念:有大小和方向的量
基础算法:
(1)加:(A.x+B.x,A.y+B.y)(A.x+B.x,A.y+B.y)(A.x + B.x,A.y + B.y)
(2)减:(A.x−B.x,A.y−B.y)(A.x−B.x,A.y−B.y)(A.x - B.x,A.y - B.y)
(3)乘常数:(A.x∗k,A.y∗k)(A.x∗k,A.y∗k)(A.x * k,A.y * k)
(4)点积:A⋅B=|A||B|cosθ=A.x∗B.x+A.y∗B.yA·B=|A||B|cos⁡θ=A.x∗B.x+A.y∗B.yA · B = |A||B|\cos\theta = A.x * B.x + A.yB.y
(5)叉积:A×B=|A||B|sinθ=A.x∗B.y−A.y∗B.xA×B=|A||B|sin⁡θ=A.x∗B.y−A.y∗B.xA \times B = |A||B|\sin\theta = A.x * B.y - A.y
B.x

基础算法

(1)旋转:将 (x,y)(x,y)(x,y) 逆时针旋转 θθ\theta 就是 (x∗cosθ−y∗sinθ,x∗sinθ+y∗cosθ)(x∗cos⁡θ−y∗sin⁡θ,x∗sin⁡θ+y∗cos⁡θ)(x * \cos\theta - y * \sin\theta,x * \sin\theta + y * \cos\theta)
(2)把向量 AAA 转到与向量 BBB 同向:B∗|A||B|B∗|A||B|B * \dfrac{|A|}{|B|}
(3)求多边形面积:12|∑n−1i=1Pi×P(i+1)%n|12|∑i=1n−1Pi×P(i+1)%n|\dfrac{1}{2}|\sum_{i=1}^{n-1}P_i \times P_{(i+1)%n}|
(4)以 AAA 为原点 BBB 为单位点求 PPP 的新坐标:(AB→⋅AP→,AB→×AP→)∗1|AB|2(AB→·AP→,AB→×AP→)∗1|AB|2(\vec{AB} · \vec{AP},\vec{AB} \times \vec{AP}) * \dfrac{1}{|AB|^2}
(5)PPP 与直线 ABABAB 的位置关系:根据 AB→×AP→AB→×AP→\vec{AB} \times \vec{AP}
(6)点 PPP 在直线 ABABAB 上的投影:A+AB→∗(AB→⋅AP→)|AB|2A+AB→∗(AB→·AP→)|AB|2A + \dfrac{\vec{AB} * (\vec{AB} · \vec{AP})}{|AB|^2}
(7)点与线段的位置关系:判断与线段所在直线的位置关系、点积判断在哪里
(8)AB//CD:AB→×CD→=0AB//⁡CD:AB→×CD→=0AB \mathop{//} CD:\vec{AB} \times \vec{CD} = 0
(9)直线 ABABAB 和直线 CDCDCD 求交点:A+AB→∗CD→×CA→AB→×CD→A+AB→∗CD→×CA→AB→×CD→A + \vec{AB} * \dfrac{\vec{CD}\times\vec{CA}}{\vec{AB} \times \vec{CD}}
(10)线段与直线求交点:线段两端点在直线两侧、直线求交点

凸包

Graham 扫描法

求凸包:
(1)找到所有的点中最左下角的点,并加入栈中
(2)将所有点按极角排序逆时针
(3)每次找到一个点,判断该点是否在最后这条边的右边,若是则弹出栈顶,直到不能弹出就加入栈里
求下凸壳:
按横坐标从小到大排序,然后执行上文 (3)
求上凸壳:
按横坐标从大到小排序,然后执行上文(3)

旋转卡壳

本质:固定一个点,所求与另一个点的位置呈单峰函数且峰值关于固定点单调的算法

例题:

题目描述:
求解凸多边形的直径。直径的定义为凸多边形上两点间距离的最大值。
解法:
(1)任意选择一个点为固定点
(2)以固定点在逆时针顺序下的下一个点为第二个点
(3)因为这两点间的距离与第二个点的位置呈单峰函数,且峰值关于固定点单调,所以就按逆时针方向移动第二个点
(4)移动到最大距离处,计算贡献,并按逆时针方向移动固定点,不移动第二个点
(5)重复(3)直到移动结束
例如下图所示:

先随机找到固定点 AAA,与对应的第二个点 BBB

移动 BBB ,使得 AAA 与 BBB 两点间距离最大

保持 BBB 不动,移动 AAA
然后再按照上文的方法一直循环执行

点与圆


判断点是否在圆上: d≤rd≤rd \le r
d=|PC|,r=rd=|PC|,r=rd = |PC|,r = r ∠DAC=arccos(rd),∠DAC=(arcsinrd)∠DAC=arccos⁡(rd),∠DAC=(arcsin⁡rd)\angle DAC = \arccos(\dfrac{r}{d}),\angle DAC = (\arcsin\dfrac{r}{d})

直线与圆


根据叉积得到 ddd
|MA|=|MB|=r2−d2−−−−−−√|MA|=|MB|=r2−d2|MA| = |MB| = \sqrt{r^2 - d^2},∠OBM=arccosdr∠OBM=arccos⁡dr\angle OBM = \arccos \dfrac{d}{r}

圆与圆

是否相交


根据 ddd 与 r1+r2r1+r2r_1 + r_2

不交圆外公切线


k=r2−r1,∠CAB=arccosr2−r1d,∠DBA=arccosr1−r2dk=r2−r1,∠CAB=arccos⁡r2−r1d,∠DBA=arccos⁡r1−r2dk = r_2 - r_1 , \angle CAB = \arccos \dfrac{r2-r1}{d},\angle DBA = \arccos \dfrac{r_1-r_2}{d}

不交圆内公切线


∠BAG=∠ABF=arcsinr1+r2d∠BAG=∠ABF=arcsin⁡r1+r2d\angle BAG = \angle ABF = \arcsin \dfrac{r_1+r_2}{d}

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

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

相关文章

固态硬盘跟机械硬盘的区别

固态硬盘(Solid State Disk或Solid State Drive),也称作电子硬盘或者固态电子盘,是由控制单元和固态存储单元(DRAM或FLASH芯片)组成的硬盘。固态硬盘的接口规范和定义、功能及使用方法上与普通硬盘的相同&a…

支持自动水平拆分的高性能分布式数据库TDSQL

随着互联网应用的广泛普及,海量数据的存储和访问成为系统设计的瓶颈问题。对于大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。给系统的稳定性和扩展性造成了极大的问题。通过数据的切分来提高系统整体性能,扩充系统整体容…

『忘了再学』Shell基础 — 27、AWK编程的介绍和基本使用

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

Cisco asa 5520 oid

一 Cisco asa CPU LOAD的oid1 5sec CPU 负载1.3.6.1.4.1.9.2.1.562 1min CPU 负载1.3.6.1.4.1.9.2.1.573 5min CPU 负载1.3.6.1.4.1.9.2.1.58 二 Cisco ASA memory的内存1 Processor pool Total:ciscoMemoryPoolUsed ciscoMemoryPoolUsed used: 1.3.6.1.4.1.9.9.48.1.1.…

一些有趣的B+树优化实验

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

JAVA基础----java中E,T,?的区别

遇到<A>,<B>,<K,V>等&#xff0c;是用到了java中的泛型。 一般使用<T>来声明类型持有者名称&#xff0c;自定义泛型类时&#xff0c;类持有者名称可以使用T(Type) 如果是容器的元素可以使用E(Element)&#xff0c;若键值匹配可以用K(Key)和V(Value)等&…

Tarjan的强联通分量

求强联通分量有很多种。 《C信息学奥赛一本通》 中讲过一个dfs求强联通分量的算法Kosdaraju&#xff0c;为了骗字数我就待会简单的说说。然而我们这篇文章的主体是Tarjan&#xff0c;所以我肯定说完之后再赞扬一下Tarjan大法好是不是 首先我们讲一下强联通分量 强联通分量指的…

poj 3321

主要是dfs,只要dfs这一步想到&#xff0c;也就是怎样把问题转化为区间求和&#xff0c;就很容易用树状数组来求解 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn 100000; int head[maxn10],e[maxn10],num[…

XXE漏洞

简介 XXE (XML External Entity Injection) 漏洞发生在应用程序解析 XML 输入时&#xff0c;没有禁止外部实体的加载。 简单的理解&#xff0c;一个实体就是一个变量&#xff0c;可以在文档中的其他位置引用该变量。 实体主要分为四种&#xff1a; 内置实体 (Built-in entities…

Linq之Expression高级篇(常用表达式类型)

目录 写在前面 系列文章 变量表达式 常量表达式 条件表达式 赋值表达式 二元运算符表达式 一元运算符表达式 循环表达式 块表达式 总结 写在前面 首先回顾一下上篇文章的内容&#xff0c;上篇文章介绍了表达式树的解析和编译。如果忘记了&#xff0c;可以通过下面系列文章提供的…

NetCore框架WTM的分表分库实现

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

WordPress WP Photo Album Plus插件‘wppa-tag’跨站脚本漏洞

漏洞名称&#xff1a;WordPress WP Photo Album Plus插件‘wppa-tag’跨站脚本漏洞CNNVD编号&#xff1a;CNNVD-201301-458发布时间&#xff1a;2013-01-24更新时间&#xff1a;2013-01-24危害等级&#xff1a; 漏洞类型&#xff1a;跨站脚本威胁类型&#xff1a;远程CVE编号&…

SpringCloudAlibaba分布式流量控制组件Sentinel实战与源码分析(上)

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Offer是否具有法律效力?

版权声明&#xff1a;原创作品&#xff0c;同意转载&#xff0c;转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。本文地址&#xff1a; http://blog.csdn.net/jobchanceleo/archive/2008/10/17/3089644.aspx<?xml:namespace prefix o …

【单元测试框架unittest】

转载于:https://www.cnblogs.com/ppppying/p/6899750.html

MySQL 添加列,修改列,删除列 的SQL写法

ALTER TABLE&#xff1a;添加&#xff0c;修改&#xff0c;删除表的列&#xff0c;约束等表的定义。 查看列&#xff1a;desc 表名;修改表名&#xff1a;alter table t_book rename to bbb;添加列&#xff1a;alter table 表名 add column 列名 varchar(30); 试了好长时间 终于…

python项目

python实战项目&#xff1a; http://www.the5fire.com/category/python实战/ python基础教程中的十个项目: python项目练习一&#xff1a;即时标记python项目练习二&#xff1a;画幅好画python项目练习三&#xff1a;万能的XMLpython项目练习四&#xff1a;新闻聚合python项目练…

C++ 炼气期之基本结构语法中的底层逻辑

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

压缩CSS代码

function yasuoCss (s) {//压缩代码   s s.replace(/\/\*(.|\n)*?\*\//g, ""); //删除注释   s s.replace(/\s*([\{\}\:\;\,])\s*/g, "$1");   s s.replace(/\,[\s\.\#\d]*\{/g, "{"); //容错处理   s s.replace(/;\s*;/g, ";…

优惠券的工厂与策略模式实现方案

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…