矢量的凸包应用

文章目录

  • 矢量
    • 定义
    • 运算
      • 加法
        • 平行四边形定则
        • 三角形定则
      • 减法
      • 数量积
      • 向量积
        • 计算
  • 凸包
    • 定义
    • 做法
      • 一级算法
      • 二级算法

矢量

定义

矢量(vector)是一种既有大小又有方向的量 ——百度百科

把矢量放在坐标轴中,也就是

有方向的线段

矢量的凸包应用_第1张图片
就这么简单。

矢量表示法: a b → \overrightarrow{ab} ab
矢量长度: ∣ a b → ∣ |\overrightarrow{ab}| ab

运算

加法

平行四边形定则

矢量的凸包应用_第2张图片
我们有两个矢量 a b → \overrightarrow{ab} ab a c → \overrightarrow{ac} ac
它们俩这样关系:
矢量的凸包应用_第3张图片
构造个平行四边形矢量的凸包应用_第4张图片
接下来我们用红色矢量来表示
a b → + a c → \overrightarrow{ab}+\overrightarrow{ac} ab +ac
矢量的凸包应用_第5张图片

三角形定则

同样是 a b → \overrightarrow{ab} ab a c → \overrightarrow{ac} ac

矢量的凸包应用_第6张图片
定义如上一个法则。

减法

减法?就是加一个负矢量。

数量积

由于与凸包无太大关系,这里先不详细讲述。
有兴趣可以参考百度百科

向量积

计算

从代数意义出发得:
定义点 a , b , c a,b,c a,b,c
a b → × a c → = ( b x − a x ) ( c y − a y ) − ( c x − a x ) ( b y − a y ) \overrightarrow{ab}\times\overrightarrow{ac}=(b_x-a_x)(c_y-a_y)-(c_x-a_x)(b_y-a_y) ab ×ac =bxax(cyay)(cxax)(byay)

从几何意义出发得:
定义矢量 a → b → \overrightarrow{a}\overrightarrow{b} a b
a b → × a c → = ∣ a → ∣ ∣ b → ∣ ⋅ s i n θ \overrightarrow{ab}\times\overrightarrow{ac}=|\overrightarrow{a}||\overrightarrow{b}|·sinθ ab ×ac =a b sinθ

凸包

定义

在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。
X的凸包可以用X内所有点(X1,...Xn)的凸组合来构造。
——百度百科

做法

枚举?!这个就不说了,时间复杂度 O ( n 3 ) O(n^3) O(n3)
其实,我们可以用矢量来做。
根据刚刚的向量积,可以推导得到,如果 a b → \overrightarrow{ab} ab a c → \overrightarrow{ac} ac 的逆时针方向,那么 a b → × a c → < 0 \overrightarrow{ab}\times\overrightarrow{ac}<0 ab ×ac <0
如果是顺时针那么 a b → × a c → > 0 \overrightarrow{ab}\times\overrightarrow{ac}>0 ab ×ac >0
如果共线则 a b → × a c → = 0 \overrightarrow{ab}\times\overrightarrow{ac}=0 ab ×ac =0
那么,我们可以通过数值来判断两个共用一点的矢量的相对位置方向了。
于是,凸包就变成了这样

一级算法

找到最边缘的一个点,并且枚举一遍到其他点的矢量的极角θ,找到向量积<0且 ∣ θ ∣ |θ| θ最小的点。
矢量的凸包应用_第7张图片
如图,显然,蓝色矢量的极角最小。
像这样,每个点都枚举一遍,时间复杂度 O ( n 2 ) O(n^2) O(n2)

二级算法

在一级算法的基础上,我们发现,有很多点重复地枚举,浪费时间。
所以,我们可以在此基础上进行栈优化。
优化后时间复杂度将达 O ( n ∗ l o g ( n ) ) O(n*log(n)) O(nlog(n))(Graham Scan Algorithm的时间复杂度)
然后还可以进行双向搜索优化,时间复杂度 O ( n ) O(n) O(n) (Andrew Algorithm的时间复杂度)。
由于篇幅有限,这里不详细讲述。请参考凸包专讲(同在凸包专题)。

你可能感兴趣的:(矢量,凸包)