计算几何专题.ppt

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

2013年ACM暑期集训——计算几何专题10级赖鹏飞浙江师范大学ACM集训队2013.8.3

概述?特点–思考繁琐–编程繁琐–细节繁琐?如何把握–需要在平时将计算几何的相关子问题透彻研究–模板的代码一定要规范–赛场上重点想思路,不能将时间花在纠缠细节上(否则finishegg?)

需要注意的细节(1)常用头文件#includemath.h(2)计算几何中一般来说使用double型比较频繁,请注意数据类型的选择,该用实数的时候就用double,而float容易失去精度。(3)判断double型的x是否为0,应当用xepsx-eps(或者fabs(x)eps),其中eps代表某个精度,常常取eps=0还有其他类似情况也要注意double类型的精度问题,int(x+eps),避免x=4.999999999

需要注意的细节(4)圆周率取3.141592654或者更精确,或者用acos(-1.0)角度制和弧度制的转换,C/C++中的三角函数均为弧度制(5)尽量少用除法,开方,三角函数,容易失去精度。用除法时注意除数不为0,输出的时候要小心-0.00000,比如a=-0.0000001,printf(“%.5f”,a);(6)在使用反三角函数时,注意定义域的范围,如acos(x),当x是你计算得到时可能会出现越界现象,比如本来应该得到是1,而你计算得到谁1.0000000001,这时acos(x)的值就会出错了,所以我们可以加一句判断,if(fabs(x-1)eps||fabs(x+1)eps)x=round(x)

必备知识:向量及其运算、点线段直线、三角形的性质、圆的相关计算例题讲解:UVa11178、UVALive4757、UVALive4838、UVA11168、UVA11796、POJ1066专题训练:多边形面积、凸包、多边形重心、点在多边形内的判定、正点多边形中的Pick公式

必备知识

向量及其运算简单的说,向量(vector)就是有大小有方向的量,如速度、位移等物理量都是向量。向量最基本的运算是加法、满足平行四边形法则。wvw+v

向量及其运算在平面坐标系下,向量和点一样,也用两个数x、y表示。structPoint//点的表示{ doublex,y; //Point(doublex=0,doubley=0):x(x),y(y){}};typedefPointVector;//从程序实现上,Vector知识Point的别名

向量及其运算向量基本运算的代码实现Vectoroperator+(VectorA,VectorB)//向量+向量=向量点+向量=点{ returnVector(A.x+B.x,A.y+B.y);}Vectoroperator-(PointA,PointB)//点-点=向量{ returnVector(A.x-B.x,A.y-B.y);}Vectoroperator*(VectorA,doublep)//点*数=向量{ returnVector(A.x*p,A.y*p);}

向量及其运算Vectoroperator/(VectorA,doublep)//点/数=向量{ returnVector(A.x/p,A.y/p);}booloperator(constPointa,constPointb){ returna.xb.x||(a.x==b.xa.yb.y);}intdcmp(doublex){ if(fabs(x)eps)return0; elseif(x0)return-1; return1;}

向量及其运算booloperator==(constPointa,constPointb)//判断两点是否相等{ returndcmp(a.x-b.x)==0dcmp(a.y-b.y)==0;}注意到上面“相等”函数用到了“三态函数”dcmp,减少了精度问题。另外,向量有一个所谓的极角,即从x轴正半轴旋转到该向量方向的角度。C标准库里atan2函数是用来求极角的,如向量(x,y)的极角就是atan2(y,x)(单位:弧度)。

向量及其运算doubleDot(VectorA,VectorB){//点积 returnA.x*B.x+A.y*B.y;}doubleLength(VectorA){//模 returnsqrt(Dot(A,A));}doubleA

文档评论(0)

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

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

1亿VIP精品文档

相关文档