求凸包-ACM-ICPC国际大学生程序设计竞赛北京赛区-北京大学.PDF

求凸包-ACM-ICPC国际大学生程序设计竞赛北京赛区-北京大学.PDF

求凸包-ACM-ICPC国际大学生程序设计竞赛北京赛区-北京大学

北京大学暑期课 《ACM/ICPC竞赛训练》 北京大学信息学院 郭炜 guo_wei@PKU.EDU.CN /guoweio fpku 课程网页:/summerschool/pku_acm_train.htm 北京大学 林舒/郭炜/杜宇飞  概述  基础——点、线、面  进阶—— 多边形、半平面 走近计算几何  计算几何 Computational Geometry  研究几何形体的计算机表示、分析与综合  “计算几何”——以计算为主的几何 地理 信息 数字 机器人 可视化 技术 辅助 设计 集成 图形学 电路 辅助 计算机 工程 视觉  题目比较长  图形抽象,需要良好的数学基础和空间想象 能力  有许多容易忽视的特殊情况,而且往往需要 单独处理,代码量大  需要考虑浮点运算时产生的精度误差  可以与其他类型的题目结合,从而更加复杂  常作为压轴题目出现在程序设计竞赛中 用矢量描述计算几何中的基本元素  沿用解析几何中的表示方法?  点 P(x,y,z)  线 x=a t+b ,y=a t+b ,z=a t+b x x y y z z  面 ax+by+cz+d=0  表示简单  功能强大  特殊情况少,思维难度较低  函数可重复利用(即所谓的“模版”)  尽可能避免除法和三角函数,精度高,效率 高 class CVector { double x, y; }; 表示从0点到 (x,y)的矢量。对矢量只关心方 向和长度,不关心(位置)起点终点 CVector operator +(CVector p, CVector q) { return CVector(p.x + q.x, p.y + q.y); } 用法:c = a + b; //a,b,c都是CVector对象 c b a CVector operator -(CVector p, CVector q) { return CVector(p.x - q.x, p.y - q.y); } 用法:c = a - b; //a,b,c都是CVector对象 c b a CVector operator *(double k, CVector p) { return CVector(k * p.x, k * p.y); } 用法:c = f * a; //a是CVector对象,f是double C方向与a相同,|c| = f * |a|

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档