该文章主要会写一些图形学相关内容。

将下图中v\Large\vec{v}分解为n\Large\vec{n}方向的投影a\Large\vec{a},以及垂直分量b\Large\vec{b}

01

v,e,α\Large\vec{v},\vec{e},\alpha都是已知的量,

cosα=av\Large \cos{\alpha}=\frac{|\vec{a}|}{|\vec{v}|};

a=vcosα\Large |\vec{a}|=|\vec{v}|\cos{\alpha};

a=nan=nvcosαn=nnvcosαn2=nnvn2\Large \vec{a}=\vec{n}\frac{|\vec{a}|}{|\vec{n}|}=\vec{n}\frac{|\vec{v}|\cos{\alpha}}{|\vec{n}|}=\vec{n}\frac{|\vec{n}||\vec{v}|\cos{\alpha}}{|\vec{n}|^2}=\vec{n}\frac{\vec{n}\vec{v}}{|\vec{n}|^2};

b=va=vnnvn2\Large \vec{b}=\vec{v}-\vec{a}=\vec{v}-\vec{n}\frac{\vec{n}\vec{v}}{|\vec{n}|^2}.

向量叉积结果的模为两向量所组成的平行四边形面积。

02

S=ah\Large S=|\vec{a}|h;

sinα=hb\Large \sin{\alpha}=\frac{h}{|\vec{b}|};

h=bsinα\Large h=|\vec{b}|\sin{\alpha};

S=absinα=a×b\Large S=|\vec{a}||\vec{b}|\sin{\alpha}=|\vec{a}\times\vec{b}|.

叉积判断二维两向量方向。

03

如果a×b>0\Large\vec{a}\times\vec{b}\gt0,则说明b\Large\vec{b}a\Large\vec{a}的逆时针方向,即图中左边的情况。

否则如果a×b<0\Large\vec{a}\times\vec{b}\lt0,则说明b\Large\vec{b}a\Large\vec{a}的顺时针方向,即图中右边的情况。

Andrew算法利用叉积求二维凸包。

首先将所有坐标按照xx轴为第一关键字,yy轴为第二关键字进行排序,分两次遍历所有点,分别求出上凸壳和下凸壳,利用单调栈维护点,以上求凸壳为例,如果栈顶的两个点和当前点的关系为上图中左边的情况,就将栈顶元素弹出,这样就使得栈中的元素按照顺序会始终“左拐”。