计算几何之基础篇
2016-04-18 22:52
204 查看
本博客转自lzxzxx神犇,原地址——/article/9449382.html
加法的结合性:(a⃗ +b⃗ )+c⃗ =a⃗ +(b⃗ +c⃗ )(\vec a + \vec b) + \vec c = \vec a + (\vec b + \vec c)
加法恒等式:0⃗ +a⃗ =a⃗ \vec 0 + \vec a = \vec a
对于一个实数kk,有ka⃗ k\vec a的方向与a⃗ \vec a相同,|ka⃗ |=k|a⃗ ||k\vec a| = k|\vec a|
对于任意一个向量X⃗ \vec X,存在一个向量−X⃗ -\vec X(模相等,方向相反)使得X⃗ +(−X⃗ )=0\vec X+(-\vec X)=0
对于实数r,sr,s,向量满足:
纯量乘法的结合性:r(sX⃗ )=(rs)X⃗ r(s\vec X)=(rs)\vec X
纯量乘法的分配性:(r+s)X⃗ =rX⃗ +sX⃗ (r+s)\vec X=r\vec X+s\vec X
向量加法的分配性:r(X⃗ +Y⃗ )=rX⃗ +rY⃗ r(\vec X+\vec Y)=r\vec X+r\vec Y
2°对于两个维数相同的向量:它们的加(减)法得出的向量各坐标等于这两个向量各坐标分别相加(减)。
点积求出的是一个标量。
叉积求出的数值为以a⃗ ,b⃗ \vec a,\vec b为邻边的平行四边形的有向面积。常用叉积来计算三角形或平行四边形面积及判断两向量的相对方向(即向左拐或向右拐)。
要求这两线段是否相交。
同理,若Q1Q2Q_1Q_2跨立P1P2P_1P_2,则要满足(Q1−P1)×(P2−P1)∗(Q2−P1)×(P2−P1)≤0(Q_1-P_1) \times (P_2-P_1) * (Q_2-P_1) \times (P_2-P_1) \le 0
当P1P2P_1P_2跨立Q1Q2Q_1Q_2且Q1Q2Q_1Q_2跨立P1P2P_1P_2,跨立试验成功。
当快速排斥试验与跨立实验都成功时,这两条线段相交。
也可看成每次选取多边形上两个相邻顶点,求前一个顶点与后一个顶点关于原点的有向面积和。证明显然。
一个nn边形的面积公式:
S=∑i=1n(XiYi+1−Xi+1Yi)2S = \frac{\sum\limits_{i = 1}^n(X_iY_{i+1}-X_{i+1}Y_i)}{2}
(顶点按顺时针(或逆时针)排序后第ii个顶点坐标(Xi,Yi),Xn+1=X1,Yn+1=Y1(X_i,Y_i),X_{n+1}=X_1,Y_{n+1} = Y_1)
向量
AB−→−\overrightarrow{AB}表示一个从点A到点B的向量。向量满足:
加法的交换性:a⃗ +b⃗ =b⃗ +a⃗ \vec a+\vec b = \vec b + \vec a加法的结合性:(a⃗ +b⃗ )+c⃗ =a⃗ +(b⃗ +c⃗ )(\vec a + \vec b) + \vec c = \vec a + (\vec b + \vec c)
加法恒等式:0⃗ +a⃗ =a⃗ \vec 0 + \vec a = \vec a
对于一个实数kk,有ka⃗ k\vec a的方向与a⃗ \vec a相同,|ka⃗ |=k|a⃗ ||k\vec a| = k|\vec a|
对于任意一个向量X⃗ \vec X,存在一个向量−X⃗ -\vec X(模相等,方向相反)使得X⃗ +(−X⃗ )=0\vec X+(-\vec X)=0
对于实数r,sr,s,向量满足:
纯量乘法的结合性:r(sX⃗ )=(rs)X⃗ r(s\vec X)=(rs)\vec X
纯量乘法的分配性:(r+s)X⃗ =rX⃗ +sX⃗ (r+s)\vec X=r\vec X+s\vec X
向量加法的分配性:r(X⃗ +Y⃗ )=rX⃗ +rY⃗ r(\vec X+\vec Y)=r\vec X+r\vec Y
向量的坐标表示法:
对于两个维数相同的点A(x1,x2,...,xn),B(y1,y2,...,yn),AB−→−=(y1−x1,y2−x2,...,yn−xn)A(x_1,x_2,...,x_n),B(y_1,y_2,...,y_n),\overrightarrow{AB} = (y_1-x_1,y_2-x_2,...,y_n-x_n)向量加减法:
1°平行四边形法则。2°对于两个维数相同的向量:它们的加(减)法得出的向量各坐标等于这两个向量各坐标分别相加(减)。
向量的模,即向量的长度:
对于向量a⃗ =(x1,x2,...,xn),|a⃗ |=∑i=1nx2i−−−−−√\vec a = (x_1,x_2,...,x_n),|\vec a| = \sqrt{\sum\limits_{i = 1}^{n}x_i^2}向量乘法:
点积:
对于两个维数为nn的向量a⃗ =(x1,x2,...,xn),b⃗ =(y1,y2,...,yn)\vec a =(x_1,x_2,...,x_n),\vec b = (y_1,y_2,...,y_n)a⃗ ⋅b⃗ =|a⃗ ||b⃗ |cosθ=∑i=1nxiyi\vec a \cdot \vec b = |\vec a| |\vec b| cos\theta = \sum\limits_{i = 1}^{n}x_i y_i点积求出的是一个标量。
叉积:
二维向量a⃗ =(x1,y1),b⃗ =(x2,y2),\vec a=(x_1,y_1),\vec b = (x_2,y_2),a⃗ ×b⃗ =x1y2−x2y1\vec a \times \vec b = x1y2-x2y1叉积求出的数值为以a⃗ ,b⃗ \vec a,\vec b为邻边的平行四边形的有向面积。常用叉积来计算三角形或平行四边形面积及判断两向量的相对方向(即向左拐或向右拐)。
向量的旋转:
向量<x,y>逆时针旋转α\alpha角度变成<x∗cosα−y∗sinα,x∗sinα+y∗cosα>两线段相交
判断两线段是否相交
已知两线段P1P2,Q1Q2P_1P_2,Q_1Q_2要求这两线段是否相交。
快速排斥试验
若两线段相交,则以这两线段为对角线分别作两个矩形,这两个矩形必须相交。这就是快速排斥试验。跨立试验
若P1P2P_1P_2跨立Q1Q2Q_1Q_2,则矢量(P1−Q1),(P2−Q1)(P_1-Q_1),(P_2-Q_1)位于矢量(Q2−Q1)(Q_2-Q_1)的两侧。即满足(P1−Q1)×(Q2−Q1)∗(P2−Q1)×(Q2−Q1)<0(P_1-Q_1) \times(Q_2-Q_1) * (P_2-Q_1)\times(Q_2-Q_1) < 0。若(P1−Q1)×(Q2−Q1)∗(P2−Q1)×(Q2−Q1)=0(P_1-Q_1) \times(Q_2-Q_1) * (P_2-Q_1)\times(Q_2-Q_1) = 0,说明P1或P2P_1或P_2在直线Q1Q2Q_1Q_2上,但因为已通过快速排斥试验,所以这两线段是相交的。故上式可改写成 (P1−Q1)×(Q2−Q1)∗(P2−Q1)×(Q2−Q1)≤0(P_1-Q_1) \times(Q_2-Q_1) * (P_2-Q_1)\times(Q_2-Q_1) \le 0同理,若Q1Q2Q_1Q_2跨立P1P2P_1P_2,则要满足(Q1−P1)×(P2−P1)∗(Q2−P1)×(P2−P1)≤0(Q_1-P_1) \times (P_2-P_1) * (Q_2-P_1) \times (P_2-P_1) \le 0
当P1P2P_1P_2跨立Q1Q2Q_1Q_2且Q1Q2Q_1Q_2跨立P1P2P_1P_2,跨立试验成功。
当快速排斥试验与跨立实验都成功时,这两条线段相交。
求两线段交点
由相似三角形、定比分点等知识我们可以得出两线段交点公式。套用向量乘法,我们能简便地求出两线段交点。面积
三角形面积
公式很多,在此不赘述,用得较多的是叉积绝对值的一半。多边形面积
选取多边形上一个顶点作为三角形的一个固定顶点,每次选取多边形上另外两个相邻顶点作为三角形的另外两个顶点,求三角形面积和。也可看成每次选取多边形上两个相邻顶点,求前一个顶点与后一个顶点关于原点的有向面积和。证明显然。
一个nn边形的面积公式:
S=∑i=1n(XiYi+1−Xi+1Yi)2S = \frac{\sum\limits_{i = 1}^n(X_iY_{i+1}-X_{i+1}Y_i)}{2}
(顶点按顺时针(或逆时针)排序后第ii个顶点坐标(Xi,Yi),Xn+1=X1,Yn+1=Y1(X_i,Y_i),X_{n+1}=X_1,Y_{n+1} = Y_1)
凸包
平面上NN个点,用一个最小(周长、面积)的凸多边形包住它们,使每个点落在凸多边形内或凸多边形上。Graham扫描法
选择一个xx坐标(相同情况下yy坐标)最小的点作为基点,使其他所有点落在第一、四象限上,然后进行极角排序,按逆时针插入其他点,用栈存储凸包上的点,插入时用叉积判断维护栈顶凸性。相关文章推荐
- 初学几种设计模式的理解与体会
- 面试题05:求子数组的最大和
- 小Po记录
- iOS开发- 拨打电话总结
- arm编程,关于函数调用形参实参在通用寄存器和栈帧里的对应关系。用汇编透视c语法操作
- 有关java并发程序同步概念的全部意义
- 同步异步阻塞非阻塞
- 共享内存
- ZOJ 3870 Team Formation 第12届浙江省省赛B题 [位运算+思维]【数学】
- Mactype与VirtualBox的兼容性问题
- 字符串-加密与解密
- make出现遗漏分隔符是必须要明白的小知识以及解决之道
- 《新世界--灵性的觉醒》感
- 【面试题】判断链表中是否有环
- JS数组排序-面试经常遇到的问题
- Linux基础: 一切都是文件
- 班级派团队项目小计(一)
- HDU 1872 稳定排序
- linux的零复制splice、tee
- 配置openfire相关设置(IOS)