计算几何--初总结

这几天一直在看计算几何,看了几道算法题,把自己弄得有点头晕,在这里理理自己的头绪,也为大家提供点东西。

1.计算几何最基础的东西“向量”,接下来为大家理理向量先:以向量a(c,d),b(e,f)举例;

(1) 判断两个向量是否平行:(即对直线而言是斜率相等) a//b => a x b = 0 => c*f - e*d = 0;

(2) 判断两个向量是否垂直:a垂直b => c*e + d*f = 0;

(3) 向量的叉乘:a x b = c*f - e*d ;

(4) 向量的内积:a * b = c*e + d*f;

(5) 判断点在直线L上,L上两点为P1 , P2,如果 点P在直线L上,则fabs((P - P1) x (P2 - P1)) <eps ;(三点共线的等价条件:a x b ==0)

(6) 判断点在线段上,这要分两步:一、判断点在直线上; 二、判断点在线段所形成的矩形内。满足这两点就可以判断。

(7) 判断线段相交 可根据叉乘的点位置判断: 如果相交那么一条线段的俩个点一定在另一条线段的不同侧。叉乘小于等于零,(包括线段端点在另一条上)。

(8) 叉乘的拐向问题,判断凹凸多边形。

(9) 取多边形上一点用叉乘只能求凸多边形的面积。

(10)内积判断点的位置: a,b,c三点,如果向量ac * 向量bc <0,则点 c 在 ab 的中间;如果向量ac * 向量bc ==0,则点 c 在 ab 的端点上,a 或 b;如果向量ac * 向量bc >0,则点 c 在 ab 的外面。

再给大家推荐几个模板: 

(1):

求任意多边形的面积。 

(2):求交点:交点一定和两条线段的端点共线,所以利用叉乘列一个方程组即可。

假设交点为p0(x0,y0)。则有:

(p1-p0)X(p2-p0)=0

(p3-p0)X(p2-p0)=0

展开后即是

(y1-y2)x0+(x2-x1)y0+x1y2-x2y1=0

(y3-y4)x0+(x4-x3)y0+x3y4-x4y3=0

将x0,y0作为变量求解二元一次方程组。

假设有二元一次方程组

a1x+b1y+c1=0;

a2x+b2y+c2=0

那么

x=(c1*b2-c2*b1)/(a2*b1-a1*b2);

y=(a2*c1-a1*c2)/(a1*b2-a2*b1);

因为此处两直线不会平行,所以分母不会为0。

posted @ 2015-08-25 22:47  Spiderman.L  阅读(206)  评论(0编辑  收藏  举报