收藏 分享(赏)

ACM程序设计计算几何基础.ppt

上传人:lxhqcj 文档编号:8481939 上传时间:2019-06-29 格式:PPT 页数:72 大小:2.57MB
下载 相关 举报
ACM程序设计计算几何基础.ppt_第1页
第1页 / 共72页
ACM程序设计计算几何基础.ppt_第2页
第2页 / 共72页
ACM程序设计计算几何基础.ppt_第3页
第3页 / 共72页
ACM程序设计计算几何基础.ppt_第4页
第4页 / 共72页
ACM程序设计计算几何基础.ppt_第5页
第5页 / 共72页
点击查看更多>>
资源描述

1、ACM程序设计,杭州电子科技大学 刘春英 ,2019/6/29,2,今天,,你 了吗?,AC,2019/6/29,3,每周一星(4):,07053410陈晟,2019/6/29,4,第五讲,计算几何初步 (Computational Geometry Basic),2019/6/29,5,第一单元,线段属性,2019/6/29,6,2019/6/29,7,2019/6/29,8,2019/6/29,9,2019/6/29,10,2019/6/29,11,2019/6/29,12,2019/6/29,13,2019/6/29,14,思考:,1、传统的计算线段相交的方法是什么?2、传统方法和本方法

2、的区别是什么?,2019/6/29,15,特别提醒:,以上介绍的线段的三个属性,是计算几何的基础,在很多方面都有应用,比如求凸包等等,请务必掌握!,2019/6/29,16,第二单元,多边形面积和重心,2019/6/29,17,基本问题(1):,给定一个简单多边形,求其面积。 输入:多边形(顶点按逆时针顺序排列) 输出:面积S,2019/6/29,18,思考如下图形:,2019/6/29,19,Any good idea?,2019/6/29,20,先看最简单的多边形三角形,2019/6/29,21,三角形的面积:,在解析几何里, ABC的面积可以通过如下方法求得:点坐标 = 边长 = 海伦公

3、式 = 面积,2019/6/29,22,思考:此方法的缺点:,计算量大,精度损失,更好的方法?,2019/6/29,23,计算几何的方法:,在计算几何里,我们知道,ABC的面积就是“向量AB”和“向量AC”两个向量叉积的绝对值的一半。其正负表示三角形顶点是在右手系还是左手系。,ABC成左手系,负面积,ABC成右手系,正面积,2019/6/29,24,大功告成:,Area(A,B,C)= 1/2 * (AB) (AC)= /2 特别注意:以上得到是有向面积(有正负)!,Xb X a Yb Y a,Xc X a Yc Y a,2019/6/29,25,凸多边形的三角形剖分,很自然地,我们会想到以

4、P1为扇面中心,连接P1Pi就得到N-2个三角形,由于凸性,保证这些三角形全在多边形内,那么,这个凸多边形的有向面积:A=sigma(Ai) (i=1N-2),2019/6/29,26,凹多边形的面积?,2019/6/29,27,依然成立!,多边形面积公式:A=sigma(Ai) (i=1N-2),结论:“有向面积”A比“面积”S其实更本质!,2019/6/29,28,任意点为扇心的三角形剖分:,我们能把多边形分成N-2个三角形,为什么不能分成N个三角形呢? 比如,以多边形内部的一个点为扇心,就可以把多边形剖分成 N个三角形。,P0,P1,P2,P6,P5,P4,P3,2019/6/29,29

5、,前面的三角剖分显然对于多边形内部任意一点都是合适的!,我们可以得到: A=sigma(Ai) ( i=1N ) 即:A=sigma /2( i=1N ),Xi X0 Yi Y0,X(i+1) X0 Y(i+1) Y0,2019/6/29,30,能否把扇心移到多边形以外呢?,2019/6/29,31,既然内外都可以,为什么不设P0为坐标原点呢?,现在的公式?,2019/6/29,32,简化的公式:,A=sigma /2 ( i=1N ),Xi Yi,X(i+1) Y(i+1),面积问题搞定!,2019/6/29,33,基本问题(2):,给定一个简单多边形,求其重心。 输入:多边形(顶点按逆时针

6、顺序排列) 输出:重心点C,2019/6/29,34,从三角形的重心谈起:,三角形的重心是:(x1+x2+x3) / 3,(y1+y2+y3) / 3,可以推广否?,Sigma(xi)/N , sigma(yi)/N (i=1N) ?,2019/6/29,35,看看一个特例:,2019/6/29,36,原因:,错误的推广公式是“质点系重心公式”,即如果认为多边形的质量仅分布在其顶点上,且均匀分布,则这个公式是对的。 但是,现在多边形的质量是均匀分布在其内部区域上的,也就是说,是与面积有关的!,2019/6/29,37,Solution:,剖分成N个三角形,分别求出其重心和面积,这时可以想象,原

7、来质量均匀分布在内部区域上,而现在质量仅仅分布在这N个重心点上(等假变换),这时候就可以利用刚才的质点系重心公式了。 不过,要稍微改一改,改成加权平均数,因为质量不是均匀分布的,每个质点代表其所在三角形,其质量就是该三角形的面积(有向面积!),这就是权!,2019/6/29,38,公式:,C=sigma(Ai * Ci) / A (i=1N) Ci=Centroid( O Pi Pi+1)= (O + Pi +Pi+1 )/3C=sigma(Pi +Pi+1)(Pi Pi+1) ) /(6A),全部搞定!,2019/6/29,40,第三单元,凸包( Convex Hull ),2019/6/2

8、9,41,2019/6/29,42,2019/6/29,43,2019/6/29,44,2019/6/29,45,2019/6/29,46,2019/6/29,47,2019/6/29,48,2019/6/29,49,2019/6/29,50,2019/6/29,51,2019/6/29,52,2019/6/29,53,2019/6/29,54,2019/6/29,55,2019/6/29,56,2019/6/29,57,2019/6/29,58,2019/6/29,59,2019/6/29,60,2019/6/29,61,2019/6/29,62,2019/6/29,63,2019/6/29

9、,64,2019/6/29,65,2019/6/29,66,2019/6/29,67,2019/6/29,68,凸包模板:,/xiaoxia版 #include #include #include typedef struct double x;double y; POINT;POINT result102; /保存凸包上的点 POINT a102; int n,top;double Distance(POINT p1,POINT p2) /两点间的距离 return sqrt(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y); double Mul

10、tiply(POINT p1,POINT p2,POINT p3) /叉积 return (p2.x-p1.x)*(p3.y-p1.y)-(p2.y-p1.y)*(p3.x-p1.x); int Compare(const void *p1,const void *p2) POINT *p3,*p4;double m;p3=(POINT *)p1; p4=(POINT *)p2; m=Multiply(a0,*p3,*p4) ;if(m0) return 1;else if(m=0 ,Any question?,2019/6/29,70,课后作业:,ACM ProgrammingExercise(5)_Geometry,2019/6/29,71,下一讲:,并查集,2019/6/29,72,Welcome to HDOJ,Thank You ,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报