算法中的基础几何知识-叉积,线段,点

1. 叉积(wikipedia):两个向量的叉积是 \mathbf{a} \times \mathbf{b} = a b \sin \theta \ \mathbf{n},表示两个向量组成的平行四边形的面积,  a(x1, y1) X b(x2, y2) = x1y2 – y1x2


2. 点是否在线段上。

先判断是否三点共线:假设判断点p是否在线段e(u,v), p,u,v 是三个点。首先构造pu,pv 向量,然后pu和pv的叉积为0,因为这是因为三点共线的话这两个向量夹角为0,所以叉积为0.

然后再判断是点是否在线段上:已经三点共线了,那么如果p在uv中间,必须有: (p.x-u.x)*(p.x-v.x)<0 || (p.y-u.y)*(p.y-v.y)<0 . 这就完成了点是否在线段上的判断。


3. 线段是否overlap(不包括共端点的情况)

假设是线段uv和线段pq

a. 计算u是否和pq共线,v是否和pq共线。都共线的话说明两条线段在同一条直线上。

b. 判断点u,v是否有一个在线段pq上(利用2的方法)

c. 如果上面两个都满足了,说明overlap,否则没有overlap



你可能感兴趣的:(算法)