• 计算几何--初总结


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

    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。

  • 相关阅读:
    Selenium学习:选择元素的几种方法
    Selenium学习:find_element_by_xpath()的几种方法
    Selenium 循环删除页面元素
    Java 基础(main方法介绍)
    Java 基础(单例 Singleton 设计模式)
    Java 练习(static 关键字)
    Java 基础(static 关键字)
    Java 练习(包装类 Wrapper )
    Java 基础(包装类 Wrapper 的使用)
    Java 练习(Object 练习二)
  • 原文地址:https://www.cnblogs.com/aimqqroad-13/p/4758859.html
Copyright © 2020-2023  润新知