- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* A E D C B 只需要把多边形的每一条边看成一条直线。这n条直线所组成的半平面交就是答案。(如图中绿色边框围起来的多边形中任意一点都满足条件) 增量法求半平面交: 按照逆时针顺序考虑多边形的所有顶点,保留在直线左侧(如果是顺时针给出当然是右侧咯)和直线上的点,删除直线右边的点。如果有向直线和多边形相交时产生了新的点,这些点应加在半平面交上。具体来说考虑完一个顶点p[i],在考虑p[i+1]之前要先判断p[i]p[i+1]是否和别的直线在多边形内部相交,如果是,则吧该点加入到半平面交上(如左图)只要最终加入的点的个数不为0就存在。。 * 半平面交模板 #include iostream #include cstdio #include algorithm #include cmath using namespace std; const double eps = 1e-8; const int maxn = 105; int dq[maxn], top, bot, pn, order[maxn], ln; //dp数组最终保存半平面交的交点 struct Point { double x, y; } p[maxn];//保存输入的点 struct Line { Point a, b;double angle; } l[maxn]; //没存每两个相邻点组成的直线 int dblcmp(double k) { if (fabs(k) eps) return 0; return k 0 ? 1 : -1; } double multi(Point p0, Point p1, Point p2) //向量的叉积运算 { return (p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y)*(p2.x-p0.x); } bool cmp(int u, int v) { int d = dblcmp(l[u].angle-l[v].angle); if (!d) return dblcmp(multi(l[u].a, l[v].a, l[v].b)) 0; return d 0; } void getIntersect(Line l1, Line l2, Point p) //得到L1 L2的交点p { double dot1,dot2; dot1 = multi(l2.a, l1.b, l1.a); dot2 = multi(l1.b, l2.b, l1.a); p.x = (l2.a.x * dot2 + l2.b.x * dot1) / (dot2 + dot1); p.y = (l2.a.y * dot2 + l2.b.y * dot1) / (dot2 + dot1); } bool judge(Line l0, Line l1, Line l2) { Point p; getIntersect(l1, l2, p); return dblcmp(multi(p, l0.a, l0.b)) 0; } * void addLine(double x1, double y1, double x2, double y2) //每相邻的两个点组成一条直线 { l[ln].a.x = x1;l[ln].a.y = y1;l[ln].b.x = x2;l[ln].b.y = y2;l[ln].angle = atan2(y2-y1, x2-x1); order[ln] = ln; //order是各条直线的标号 ln++; } void halfPlaneIntersection() //增量法求半平面交 { int i, j; sort(order, order+ln, cmp); for (i = 1, j = 0; i ln; i++) if (dblcmp(l[order[i]].angle-l[order[j]].angle) 0) order[++j] = order[i]; ln = j + 1;dq[0] = order[0];dq[1] = order[1];bot = 0;top = 1; for (i = 2; i ln; i++) { while (bot top judge(l[order[i]], l[dq[top-1]], l[dq[top]])) top--; while (bot top judge(
您可能关注的文档
- 平凡从容的“慢生活”.ppt
- 平凡从伟大中起步.ppt
- 平凡的岗位不平凡的事业.doc
- 平凡的世界 分析讲稿.ppt
- 平凡的世界 阅读推荐.ppt
- 平凡的世界,不平凡的梦想.ppt
- 平凡的世界__做客.ppt
- 平凡的世界_读后感.ppt
- 平凡的世界班会主题.ppt
- 平凡的世界——莼湖分局李心怡.ppt
- 2024-2025学年山东省潍坊市昌邑市高一上学期11月期中考试政治试题(解析版).docx
- 2024-2025学年山东省枣庄市薛城区、山亭区高二上学期1月期末考试政治试题(解析版).docx
- 2024-2025学年浙江省金砖联盟高一下学期4月期中考试政治试题(解析版).docx
- 2024-2025学年辽宁省协作体高三下学期第二次模拟考试政治试题(解析版).docx
- 2024-2025学年山东省威海市高二上学期期末考试政治试题(解析版).docx
- 2024-2025学年江西省八校协作体高二上学期期中考试政治试题(解析版).docx
- 2024-2025学年浙江省杭州市S9联盟高一上学期期中联考政治试题(解析版).docx
- 2024-2025学年浙江省宁波市三锋教研联盟高一下学期期中联考政治试题(解析版).docx
- 2024-2025学年山东省滨州市高二上学期1月期末考试政治试题(解析版).docx
- 2024-2025学年内蒙古自治区通辽市高二下学期3月月考政治试题(解析版).docx
最近下载
- GB∕T38305-2019头部防护救援头盔..pdf
- 2024届湖南省张家界市慈利县高一物理第二学期期末达标检测模拟试题含解析.doc VIP
- 通信铁塔标准图集(V1.0).pdf VIP
- 选矿试验技术方法 第5部分:浮选.docx VIP
- 《选矿试验技术方法第4部分:磁选》.pdf VIP
- 上市公司董事会秘书工作手册-信息披露政策法规汇编(通用) 20240627.pdf VIP
- 高标准农田设计实施方案(技术标340页).doc VIP
- 1688店铺运营计划方案.pdf VIP
- 《医学伦理学》教案 第四章 医学伦理学的规范体系.pdf VIP
- 《选矿试验技术方法 第1部分:破碎筛分》.pdf VIP
文档评论(0)