算法计算几何

Posted ONION_CYC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法计算几何相关的知识,希望对你有一定的参考价值。

【斜率】

k=Δy/Δx

斜率为0时,直线平行于x轴(Δy=0)。

★斜率不存在时,直线平行于y轴(Δx=0)

两点确定一条直线,所以枚举斜率时只需要枚举任意两点。

eg.枚举同一直线上的点,利用在同一直线上的点必定在其中两个点组成的直线上的原理,只需枚举任意两点,再枚举第三点是否在该直线上即可,复杂度O(1/6*n^3)。

枚举多少直线交于一点,利用交于同一点的直线必然经过其中两条直线相交点的原理,直接枚举两条直线后再枚举第三条即可。

【向量】

向量在表示上就是点。

 

点积:两个向量长度的乘积再乘上它们夹角的余弦。(结果是数值)

Dot(A,B)=Len(A)*Len(B)*cos(θ)

在平面坐标系下,Dot(A,B)=xAxB+yAyB

点积为0时,两向量垂直,也就是两向量垂直当且仅当xAxB+yAyB=0

向量长度:Len(A)=sqrt(Dot(A,A))。

向量夹角:Angle(A,B)=cos(Dot(A,B)/Len(A)/Len(B))。

 

叉积:两个向量组成的三角形的有向面积的两倍,或称平行四边形。(结果是向量,暂不去理解方向问题)

cross(A,B)=xAyB-xByA

叉积有向,方向取决于sin(θ),顺着第一个向量A看,B在左边则叉积>0,否则<0。

特别地,如果两向量共线(平行),叉积等于0。也就是两向量平行当且仅当xAyB-xByA=0

所以,叉积不满足交换律。

应用:引用自——计算几何基础——【点积和叉积的用处】

1:通过结果的正负判断两矢量之间的顺逆时针关系

2:判断折线拐向,可转化为判断第三点在前两的形成直线的顺逆时针方向,然后判断拐向。

3:判断一个点在一条直线的那一侧,同样上面的方法。

4:判断点是否在线段上,可利用叉乘首先判断是否共线,然后在判断是否在其上。

5:判断两条直线是否相交(跨立实验):根据判断点在直线那一侧我们可以判断一个线段的上的两点分别在另一个线段的两侧,然后对另一条线段也进行相同的判断就ok。

 

向量旋转:

x‘=xcosa-ysina

y‘=xsina+ycosa

 

以上是关于算法计算几何的主要内容,如果未能解决你的问题,请参考以下文章

算法学习:计算几何基础

计算几何及其应用——计算几何基础

转计算几何题目推荐

计算几何常用算法总结

计算几何:凸包

POJ 计算几何入门题目推荐(转)