计算几何----ACM国际大学生程序设计-Read.PPT

计算几何----ACM国际大学生程序设计-Read.PPT

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算几何----ACM国际大学生程序设计-Read

计算几何 ----ACM国际大学生程序设计 主讲:王树林 计算几何概述 一基本定义 采用Ed(或Rd)表示d维欧几里德空间,即具有度量 点 d元组(x1,….,xd) 线,线性簇 线段 凸集 凸壳 多边形 平面图 v-e+f=2 二计算几何中的问题 1)提取子集 在一批给定的对象中提取满足某种性质的子集。比如求点集的凸壳顶点的问题。 2)计算 计算给定集合的某几个几何参数的值。 3)判定 在提取子集和计算问题中都有判定问题。 比如,在点集S中询问是否存在距离大于d的点对。 三计算模型 规定RAM的原始运算如下: 1)算术运算 2)两个实数之间的比较 3)间接寻址及求根运算,三角函数运算,指数函数运算,对数函数运算。 执行每种运算耗费一个时间单位。 四常见计算几何基本问题 矢量的概念   矢量加减法   矢量叉积   折线段的拐向判断   判断点是否在线段上   判断两线段是否相交   判断线段和直线是否相交   判断矩形是否包含点   判断线段、折线、多边形是否在矩形中   判断矩形是否在矩形中   判断圆是否在矩形中   判断点是否在多边形中   判断线段是否在多边形内   判断折线是否在多边形内   判断多边形是否在多边形内   判断矩形是否在多边形内   判断圆是否在多边形内   判断点是否在圆内   判断线段、折线、矩形、多边形是否在圆内   判断圆是否在圆内   计算点到线段的最近点   计算点到折线、矩形、多边形的最近点   计算点到圆的最近距离及交点坐标   计算两条共线的线段的交点   计算线段或直线与线段的交点   求线段或直线与折线、矩形、多边形的交点   求线段或直线与圆的交点   凸包的概念   凸包的求法 基本问题(续) 矢量的概念:   如果一条线段的端点是有次序之分的,我们把这种线段称为有向线段(directed segment)。如果有向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2。   矢量加减法:   设二维矢量P = ( x1, y1 ),Q = ( x2 , y2 ),则矢量加法定义为: P + Q = ( x1 + x2 , y1 + y2 ),同样的,矢量减法定义为: P - Q = ( x1 - x2 , y1 - y2 )。显然有性质 P + Q = Q + P,P - Q = - ( Q - P )。 基本问题(续) 矢量叉积:   计算矢量叉积是与直线和线段相关算法的核心部分。设矢量P = ( x1, y1 ),Q = ( x2, y2 ),则矢量叉积定义为由(0,0)、p1、p2和p1+p2所组成的平行四边形的带符号的面积,即:P × Q = x1*y2 - x2*y1,其结果是一个标量。显然有性质 P × Q = - ( Q × P ) 和 P × ( - Q ) = - ( P × Q )。一般在不加说明的情况下,下述算法中所有的点都看作矢量,两点的加减法就是矢量相加减,而点的乘法则看作矢量叉积。   叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系:   若 P × Q 0 , 则P在Q的顺时针方向。   若 P × Q 0 , 则P在Q的逆时针方向。   若 P × Q = 0 , 则P与Q共线,但可能同向也可能反向。 基本问题(续) 折线段的拐向判断:   折线段的拐向判断方法可以直接由矢量叉积的性质推出。对于有公共端点的线段p0p1和p1p2,通过计算(p2 - p0) × (p1 - p0)的符号便可以确定折线段的拐向:   若(p2 - p0) × (p1 - p0) 0,则p0p1在p1点拐向右侧后得到p1p2。   若(p2 - p0) × (p1 - p0) 0,则p0p1在p1点拐向左侧后得到p1p2。   若(p2 - p0) × (p1 - p0) = 0,则p0、p1、p2三点共线。 基本问题(续) 基本问题(续) 判断点是否在线段上:   设点为Q,线段为P1P2 ,判断点Q在该线段上的依据是:( Q - P1 ) × ( P2 - P1 ) = 0 且 Q 在以 P1,P2为对角顶点的矩形内。前者保证Q点在直线P1P2上,后者是保证Q点不在线段P1P2的延长线或反向延长线上,对于这一步骤的判断可以用以下过程实现:   ON-SEGMENT(pi,pj,pk)   if min(xi,xj) = xk = max(xi,xj) and min(yi,yj) = yk = max(yi,yj)   then return true;   else return false;   特别要注意的是,由于需要考虑水平线段和垂直线段两种特殊情况,min(xi,

您可能关注的文档

文档评论(0)

laolao123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档