您的位置:首页 > 其它

计算几何之基础篇

2015-09-09 21:13 155 查看

向量

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坐标)最小的点作为基点,使其他所有点落在第一、四象限上,然后进行极角排序,按逆时针插入其他点,用栈存储凸包上的点,插入时用叉积判断维护栈顶凸性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: