- 1、本文档共59页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 前面的三角剖分显然对于多边形内部任意一点都是合适的! 我们可以得到: A=sigma(Ai) ( i=1…N ) 即:A=sigma ∣ ∣/2 ( i=1…N ) Xi – X0 Yi –Y0 X(i+1) – X0 Y(i+1) –Y0 * * 能否把扇心移到多边形以外呢? P0 P1 P2 P3 P4 * * 既然内外都可以,为什么不设P0为坐标原点呢? O P1 P2 P3 P4 现在的公式? * * 简化的公式: A=sigma∣ ∣/2 ( i=1…N ) Xi Yi X(i+1) Y(i+1) * * 基本问题(2): 给定一个简单多边形,求其重心。 输入:多边形(顶点按逆时针顺序排列) 输出:重心点C 求任意多边形的重心 1、质量集中在顶点上, n个顶点坐标为(xi,yi),质量为mi,则重心 X = ∑( xi×mi ) / ∑mi Y = ∑( yi×mi ) / ∑mi 2、若每个点的质量相同则 X = ∑xi / n Y = ∑yi / n 2、质量分布均匀 3、特殊地,质量均匀的三角形重心: X = ( x0 + x1 + x2 ) / 3 Y = ( y0 + y1 + y2 ) / 3 * 将n边形分成多个三角形,分别求出重心坐标以及质量m【因为质量分布均匀,所以可以设密度为1,则面积就是质量】 因为质量都集中在重心 所以把所有求出来的重心按逆时针连接起来又是一个多边形 但是这个多边形的质量集中在顶点上 所以可以利用上面公式进行计算 * 求质量分布均匀的n边形重心 #include cstdio #include cstdlib #include iostream using namespace std; const int N = 1000000; struct point { double x; double y; } p[N], g; //p数组保存多边形的顶点 double crossProd(point A, point B, point C) //计算三角形ABC有向面积 { return (B.x-A.x)*(C.y-A.y) - (B.y-A.y)*(C.x-A.x); } void compGravity(int n) //求重心g { point tmp; double sumArea, area; sumArea = 0; g.x = g.y = 0; for (int i=2; in; ++i) { area = crossProd(p[0], p[i-1], p[i]); sumArea += area; tmp.x = p[0].x + p[i-1].x + p[i].x; tmp.y = p[0].y + p[i-1].y + p[i].y; g.x += tmp.x * area; g.y += tmp.y * area; } g.x /= (sumArea * 3.0); g.y /= (sumArea * 3.0); } * 二、凸包的求解 * 二.凸包的求法(Graham算法) 凸包的定义: 你可以这样想象:平面上有很多根钉子,你的手里有一根橡皮环,你用橡皮环把这些钉子都套起来,然后松手,橡皮环所形成的图形就是这些钉子的一个凸包(如下图) Graham扫描法: 1.选则p0作为y坐标最小的点,如果有多个这样的点,则选择x最小的。 2.剩余的点根据他们相对于p0的极角的大小从小到大排序,设排序后的点依次为P[0....n]。 3. 设置一个栈,P0,P1,P2先入栈。 4.对于 P[3..n]的每个点,若它与栈顶的两个点不构成向左转的关系,则将栈顶的点出栈,直至没有点需要出栈以后将当前点进栈; 所有点处理完之后栈中保存的点就是凸包了。 思考: 如何对这些极角排序? 用atan函数?显然会有精度问题,不准确 回忆一下以前讲的向量的叉积。 * p0 p1 p2 如何知道p2的极角就比p1大呢? 再思考一下如何判断左转还是右转? 自然也是叉积。。。 显然只需要向量p0p1和向量p0p2做叉积就可以了 ,如果大于0则p2的极角比p1大。 * * * * * * * * * * * * * * * * * * * * * * * * * * * graham算法模板 #includ
您可能关注的文档
- 品质控制体系概述.docx
- 品质与发展沿格概述.ppt
- 品种识别草花概述.ppt
- 品种选育与繁育概述.ppt
- 乒乓球理论概述.ppt
- 平安保险-招聘培训手册概述.ppt
- 平安过周末概述.ppt
- 平安进校园,幸福伴我行概述.ppt
- 平板运动试验概述.ppt
- 平版印刷工艺流程概述.ppt
- 2024版合同违约民事起诉状法律适用要点解析手册.docx
- 2024版劳务公司合伙人技术共享合同.docx
- 2024版南京房产局抵押贷款房屋租赁合同范本.docx
- 2024版劳动和社会保障局人事考核Word模板下载服务协议.docx
- 2024版工程招投标实训总结范例与工程勘察合同细则.docx
- 人工智能应用 课件全套 第1--6章 人工智能概述--- 体验人工智能.pdf
- 人教版七年级下册英语Unit 3《Keep Fit》全单元教学课件(新教材).pdf
- 人教版七年级下册英语Unit 1《Animal Friends》全单元教学课件(新教材).pdf
- 传感器原理及项目实战 课件全套 项目0--10 绪论、温度检测-位姿检测.pdf
- 新能源汽车动力蓄电池系统构造与检修 课件全套 任务1-1 动力蓄电池检修作业准备与检修工具使用---5-5 动力蓄电池绝缘故障检修.pdf
文档评论(0)