- 1、本文档共71页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ACM程序设计 杭州电子科技大学 刘春英 acm@hdu.edu.cn 今天, 你 了吗? 每周一星(4): 第五讲 计算几何初步 (Computational Geometry Basic) 第一单元 线段属性 思考: 1、传统的计算线段相交的方法是什么? 2、传统方法和本方法的区别是什么? 特别提醒: 以上介绍的线段的三个属性,是计算几何的基础,在很多方面都有应用,比如求凸包等等,请务必掌握! 第二单元 多边形面积和重心 基本问题(1): 给定一个简单多边形,求其面积。 输入:多边形(顶点按逆时针顺序排列) 输出:面积S 思考如下图形: Any good idea? 先看最简单的多边形——三角形 三角形的面积: 在解析几何里, △ABC的面积可以通过如下方法求得: 点坐标 = 边长 = 海伦公式 = 面积 思考:此方法的缺点: 计算量大 计算几何的方法: 在计算几何里,我们知道,△ABC的面积就是“向量AB”和“向量AC”两个向量叉积的绝对值的一半。其正负表示三角形顶点是在右手系还是左手系。 大功告成: Area(A,B,C)= 1/2 * (↑AB) × (↑AC) =∣ ∣/2 特别注意: 以上得到是有向面积(有正负)! 凸多边形的三角形剖分 很自然地,我们会想到以 P1为扇面中心,连接P1Pi就得到N-2个三角形,由于凸性,保证这些三角形全在多边形内,那么,这个凸多边形的有向面积: A=sigma(Ai) (i=1…N-2) 凹多边形的面积? 依然成立!!! 多边形面积公式:A=sigma(Ai) (i=1…N-2) 任意点为扇心的三角形剖分: 我们能把多边形分成N-2个三角形,为什么不能分成N个三角形呢? 比如,以多边形内部的一个点为扇心,就可以把多边形剖分成 N个三角形。 前面的三角剖分显然对于多边形内部任意一点都是合适的! 我们可以得到: A=sigma(Ai) ( i=1…N ) 即:A=sigma∣ ∣/2 ( i=1…N ) 能否把扇心移到多边形以外呢? 既然内外都可以,为什么不设P0为坐标原点呢? 简化的公式: A=sigma∣ ∣/2 ( i=1…N ) 基本问题(2): 给定一个简单多边形,求其重心。 输入:多边形(顶点按逆时针顺序排列) 输出:重心点C 从三角形的重心谈起: 三角形的重心是: (x1+x2+x3) / 3,(y1+y2+y3) / 3 看看一个特例: 原因: 错误的推广公式是“质点系重心公式”,即如果认为多边形的质量仅分布在其顶点上,且均匀分布,则这个公式是对的。 但是,现在多边形的质量是均匀分布在其内部区域上的,也就是说,是与面积有关的! Solution: 剖分成N个三角形,分别求出其重心和面积,这时可以想象,原来质量均匀分布在内部区域上,而现在质量仅仅分布在这N个重心点上(等假变换),这时候就可以利用刚才的质点系重心公式了。 不过,要稍微改一改,改成加权平均数,因为质量不是均匀分布的,每个质点代表其所在三角形,其质量就是该三角形的面积(有向面积!),——这就是权! 公式: C=sigma(Ai * Ci) / A (i=1…N) Ci=Centroid(△ O Pi Pi+1) = (O + ↑Pi +↑Pi+1 )/3 C=sigma((↑Pi +↑Pi+1)(↑Pi ×↑Pi+1) ) /(6A) 第三单元 凸包( Convex Hull ) 凸包模板: Any question? 课后在线作业: ?《ACM程序设计》在线作业(5)—— 计算几何 Welcome to HDOJ Thank You ~ //xiaoxia版 #include stdio.h #include math.h #include stdlib.h typedef struct { double x; double y; }POINT; POINT result[102]; //保存凸包上的点 POINT a[102]; 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 Multiply(POINT p1,POINT p2,POINT p3) //叉积 { return ((p2.x-p1.x
您可能关注的文档
- (139)韶关学院信息化建设《十二五》规划.doc
- [天涯杂谈]这是今年台湾历史高考题你能做出多少?.doc
- [线上徵文评比]高中组9月份得奖作品.doc
- ¢x8.5机立窑治理方案.doc
- 《标日》中级动词自他性.doc
- 《红楼梦林黛玉与北静王》游戏攻略.docx
- 《湖南战略性新兴产业关键共性技术发展导向目录(2015)》.doc
- 《老僧与蝎子》作文讲评.doc
- 《蒙代尔不可能三角》运用和滥用.doc
- 《四个愿望》教学设计.doc
- 某某单位2024年党建工作总结及2025年工作计划.doc
- 某某市发改委关于2024年度落实党风廉政建设工作责任制情况的报告.doc
- 某某局2024年全面从严治党和党风廉政建设工作总结.doc
- 某某区财政局2024年法治政府建设总结及2025年工作谋划.doc
- 2024年党管武装工作述职报告2篇.doc
- 2024年度国企党委书记抓基层党建工作述职报告3篇.doc
- 公司党委书记2024年述职述廉报告.docx
- 2024年度乡镇党委领导班子民主生活会(四个带头)对照检查材料.doc
- 市医疗保障局关于2024年法治政府建设工作情况的报告.docx
- 市民政局党组2024年巡察整改工作情况报告.docx
文档评论(0)