您的位置:首页 > 其它

[计算几何初步]

2015-08-05 14:04 281 查看
[计算几何笔记]
--概念篇
向量点积:
也称向量内积,数量积,即a·b=(a,b)·(c,d)=ac+bd
向量内积的物理意义是b向量在a向量方向上的投影长度*a向量的模
故向量内积有性质:a·b=|a|*|b|*cosα
所以向量的模|a|=sqrt(a·a)
用Dot(a,b)表示



向量夹角:
很显然,向量a与b夹角的余弦值cosβ=a·b/|a|*|b|
向量垂直:
数量积为0,则两向量垂直,即cosβ=0,所以定义为向量点积为0;
向量的方向向量:
即a/|a|
向量的投影:
向量b在a上投影的模为a·b/|a|,那么向量b在a上投影向量为a·b/|a|
* (a/|a|)
化简一下就是|a|*|b|*cosβ/|a|*
a/|a|= a*|b|cosβ/|a|,也不算化简了。因为平常都写向量内置函数的。

向量的对称:
如下图,用向量加减就好了



向量叉积:
也称向量外积,
|a×b|=|a|·|b|·Sin<a,b>.
公式为a*b=x1y2-x2y1
向量外积代表的是向量a与向量b所构成的平行四边形的有向面积
也是构成的三角形面积的两倍
其符号为,若b在a的逆时针方向,那么a×b>0
用Cross(a,b)表示



向量的旋转方向:
如果b在a的逆时针方向,那么cross(a,b)>0,也就是向左旋转

Q:如果我想把一个向量逆时针旋转α度,该怎么计算?
我们知道,如果要把向量a旋转到向量b,旋转α度
带着向量模很不好计算的吧~所以我们用a的方向向量来旋转,最后乘以向量模√
既然a是单位向量,那么a=(x1,y1),则有x1=Cosβ,y1=Sinβ
b向量即为(Cos(α+β),Sin(α+β))
根据三角函数展开,有
x2=cosαcosβ-sinαsinβ y2=sinαcosβ+cosαsinβ
1cosα-y1sinαy2=x1sinα+y1cosα
即a向量(x1,y1)*矩阵(矩阵详见白书)



向量的极角:
即tan值,用atan2(y,x)
直线的表示:
用一个点+方向向量来表示
点到直线的距离:
根据数学我们有|Ax0+By0+C|/sqrt(A^2+B^2)
根据下图,我们可以在直线AB上取两点AB,我们可以求出|Cross(PA,PB)|,即△PAB的有向面积的两倍,除以AB的模就是PQ的长度



判断点是否在线段上:
如右图线段AB,如果点在直线上,显然有Cross(QA,QB)=0
我们需要判断点Q是否在线段AB上
对于线段AB和点Q,如果位置关系如下图





所示,那么A.x<Q.x<B.x,A.y<Q.y<B.y
但其实关系很复杂,我们知道不等关系用乘积来表示
很简单,所以我们有公式:
(Q.x-A.x)*(Q.x-B.x)<0
(Q.y-A.y)*(Q.y-B.y)<0
酱紫就可以简单地判断点是否在线段上了
求一个点到线段的最小距离:
喵,过点P作一条垂线,我们的任务就是判断点Q是否
在线段AB上,如果Q在AB上,那么距离就是|PQ|,否则是
min(|PA|,|PB|)



下面来复习一些几何知识。附例题:
求三角形的重心:(A+B+C)/3(向量)
ProblemA:
给你三个定点,求过三个点的圆。
ProblemB:
给你三个凸四边形三条相等边上的中点坐标,你要还原这个凸四边形,输出四个顶点的坐标。

解两个问题都可以有两种方法:
1.设未知数解方程(高斯消元orz)
2.运用几何知识求解(数学orz)

凸多边形的三角剖分:
我们用有向面积来计算,最后会神奇的抵消一些面积,正好剩下凸多边形的面积(前提是点应该是有序的)

凸包、旋转卡壳
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: