计算几何基础提纲

来源:互联网 发布:macoffice办公软件 编辑:程序博客网 时间:2024/06/15 02:57

 一、约定格式

a)         点、向量的表示

b)         封装向量加减法、点积、叉积

double mult(struct point p1,struct point p2,struct point p3)  {      return (p2.x-p1.x)*(p3.y-p1.y)-(p2.y-p1.y)*(p3.x-p1.x);  }  double dis(struct point p1,struct point p2)  {      return (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);  }  

c) 线段——>(两个点隔得很远,取值很大)直线

矩形——>平面

二、点定位

a)         判断点是否在线段上

                           i.               通过叉乘为零判断点在直线上

                         ii.               点的坐标在线段端点范围内

b)         判断点在三角形内

                           i.               三个小三角形面积和等于大三角形

c)         判断点在多边形内外

                           i.               方法一:扫描法

1.         水平向右作一射线(长线段)

2.         射线与多边形有奇数个交点,则在多边形内

3.         细节:点在边上、射线交于顶点等

4.         适用于所有多边形

                         ii.               方法二:叉乘判别法

1.         按照顺时针给每条边编号

2.         两个向量:这条边的第一个端点连向第二个端点,判断点和第一个端点

3.         所有矢积为正

4.         适用于凸多边形

                       iii.               方法三:角度和判别法

1.         内角和2pi,角度有正负

2.         注意精度和单位

3.         适用于所有多边形

d)         判断点在矩形和圆中,直接用简易方法就行了

三、线段性质

a)         判断两线段相交(两个向量相互叉乘为零:1.一条线段的起点/终点在另一条线段上,2两条线段重合;两个向量相互叉乘不全部小于零:两条线段不相交;两个向量相互叉乘全部小于零:两条线段相交.)

                           i.               快速排斥实验

                         ii.               通过i进行跨立实验

b)         求线段交点

                           i.               方法一:先判断相交,再使用解析几何方法

                         ii.               方法二:叉积法(公式)

c)         判断一组线段相交

                           i.               按坐标把所有线段端点从小到大排序,设集合为S

                         ii.                       取一个端点p.如果p是线段s的左端点,则插入序列T中

                       iii.                       1

                        iv.                       1

四、半平面求交

a)         增量法

b)         分治法

c)         排序增量法

解析几何题纲

一、交点计算

a)         点到线段的最近点。设P(x1,y1)Q(x2,y2)R(x0,y0),Q 到PR最近点

                           i.               线段平行于坐标轴

                         ii.               线段不平行于坐标轴

                       iii.               以下各点都是处理下类似的细节就好

b)         点到圆的最近距离、最近点

c)         两条共线线段的交点

d)         两条不共线线段的交点

e)         线段与直线/圆的交点

二、面积

a)         三角形的面积:七类公式https://zhidao.baidu.com/question/618184143749046732.html

        1.已知三角形底a,高h,则 S=ah/2
  2.已知三角形三边a,b,c,则
  (海伦公式)(p=(a+b+c)/2)
  S=√[p(p-a)(p-b)(p-c)]
  =(1/4)√[(a+b+c)(a+b-c)(a+c-b)(b+c-a)]
       3.已知三角形两边a,b,这两边夹角C,则S=1/2 * absinC
     4.设三角形三边分别为a、b、c,内切圆半径为r
 则三角形面积=(a+b+c)r/2
     5.设三角形三边分别为a、b、c,外接圆半径为R
 则三角形面积=abc/4R
 6.S△=1/2 *
  | a b 1 |
  | c d 1 |
  | e f 1 |
  | a b 1 |
  | c d 1 | 为三阶行列式,此三角形ABC在平面直角坐标系内A(a,b),B(c,d), C(e,f),这里ABC
  | e f 1 |
  选区取最好按逆时针顺序从右上角开始取,因为这样取得出的结果一般都为正值,如果不按这个规则取,可能会得到负值,但不要紧,只要取绝对值就可以了,不会影响三角形面积的大小!
  7.海伦——秦九韶三角形中线面积公式:
  S=√[(Ma+Mb+Mc)*(Mb+Mc-Ma)*(Mc+Ma-Mb)*(Ma+Mb-Mc)]/3
  其中Ma,Mb,Mc为三角形的中线长.
  8.根据三角函数求面积:
  S= ½ab sinC=2R² sinAsinBsinC= a²sinBsinC/2sinA
  注:其中R为外切圆半径。
  9.根据向量求面积:
  SΔ)= ½√(|AB|*|AC|)²-(AB*AC)²

b)         多边形的面积(简单不自交):三角剖分

                           i.               内点与顶点

                         ii.               顶点与顶点

                       iii.               外点与顶点

三、与三角形有关的圆

a)         外接圆:

b)         内切圆:

四、对称

a)         点对称

b)         直线对成

五、平移和旋转

六、最小圆覆盖

a)         点增量

b)         三角形增量法

 

 

凸包部分(求用凸多边形的包围起来:1、叉乘为负O(n^2);2、用极坐标表示个点,按角度排序,用栈维护,如果出现凹,弹出这个点)

一、概念

二、卷包裹法

三、Graham-Scan算法

四、旋转卡壳

 

 

剩余的几何板块:

       立体几何(相交、投影、多面体、三维土包、最小球包涵、坐标变换)

       Voronoi图

       三角刨分

原创粉丝点击