简单多边形三角化(暴力)

简单多边形三角化(暴力)


说在前面

网上流传着各种神奇的多边形三角剖分算法,但是讲道理,实现难度太高了。。。也没有搜到其他人的实现。这里写个最暴力的做法。。随机数据验证没问题,欢迎 hack

实现

一个简单多边形的耳朵定义为:如果一个凸点与他相邻的点构成的三角形内,没有其他多边形的点,那么他是一个耳朵。

我们的思想很简单,每次切掉一个耳朵,直到多边形变为一个三角形。

核心代码

typedef vector<vector<P>> VPP;
VPP divPtoT(vector<P> ps){ // O(n^3) 简单多边形三角剖分 多边形逆时针VPP T; T.clear();if(ps.size()<3) return T;list<int> L;rep(i, 0, ps.size()-1) L.pb(i);auto ck = [&](P A, P B, P C) {if( crossOp(B,C,A) < 0 ) return false;for(int p: L) {if( ps[p] == A || ps[p] == B || ps[p] == C ) continue;if( crossOp(A,B,ps[p])>0&&crossOp(B,C,ps[p])>0&&crossOp(C,A,ps[p])>0 ) return false;}return true;};P A,B,C;while(L.size() > 3) {auto it = L.begin();A = ps[*it]; ++it; B = ps[*it]; --it; C = ps[*--L.end()];if(ck(A,B,C)) { L.erase(it); T.pb({A,B,C}); continue; }auto ed = --L.end();B = ps[*ed]; -- ed; A = ps[*ed]; ++ ed; C = ps[*L.begin()];if(ck(A,B,C)) { L.erase(ed); T.pb({A,B,C}); continue; }it = ++L.begin();for( ; it != ed; ++ it) {B = ps[*it]; --it; A = ps[*it]; ++it; ++it; C = ps[*it]; --it;if(ck(A,B,C)) { L.erase(it); T.pb({A,B,C}); break; }}}if(L.size() == 3) {vector<P> tmp; for(auto it = L.begin(); it != L.end(); ++ it) tmp.pb(ps[*it]);T.pb(tmp);}return T;
}

实验

使用 cyaron 生成简单多边形,用三角剖分求面积,与实际多边形面积比较判断。

样例:
Figure_1.png-271.5kB
生成:
Figure_2.png-533.6kB

转载于:https://www.cnblogs.com/RRRR-wys/p/11430147.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客网【每日一题】4月13号 Accumulation Degree

文章目录题目描述样例分析&#xff1a;题意&#xff1a;题解&#xff1a;代码&#xff1a;本题目传送题目树学是这个题的简易版&#xff0c;也涉及换根问题&#xff0c;可以先看看这个 树学 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768…

微软把UWP定位成业务线应用程序开发平台

微软把UWP定位成传统业务线&#xff08;LOB&#xff09;应用程序开发平台&#xff0c;以使用Windows Template Studio实现快速应用程序开发为重点。但是&#xff0c;为了把LOB开发人员吸引到UWP平台&#xff0c;他们在做的事情不止这些。最初发布时&#xff0c;通用Windows平台…

读 《CSharp Coding Guidelines》有感

C# 编程指南前不久在 Github 上看见了一位大牛创建一个仓库&#xff1a;CSharpCodingGuidelines&#xff0c;打开之后看了一下 readme.md 相关描述&#xff0c;感觉应该很不错&#xff0c;于是就 clone 到本地拜读一下&#xff0c;这里列一些自己的笔记&#xff0c;方便日后回顾…

牛客网 【每日一题】4月10日 二分图染色(弱化版)

精讲 组合、容斥 文章目录题目&#xff1a;题意&&题解&#xff1a;&#xff1a;代码&#xff1a;题目传送题目&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 524288K&#xff0c;其他语言1048576K 64bit IO Format: %lld …

微软Windows Community Toolkit一览

为了满足业务线开发人员的需求&#xff0c;微软推出了Windows Community Toolkit。这个快速变化的库充当了新的UWP控件和功能的测试基础。在创建UWP之初&#xff0c;其重点目标是智能手机和平板电脑。这意味着大部分开发预算都花费在控件上&#xff0c;确保这些控件能够在有限的…

如何简单的在 ASP.NET Core 中集成 JWT 认证?

前情提要&#xff1a;ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统文章超长预警&#xff08;1万字以上&#xff09;&#xff0c;不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包自上一篇介绍如何在 ASP.NET Core 中集成 JWT 的博文发布…

【二分】【暴力】蛋糕(gmoj 3918)

蛋糕 gmoj 3918 题目大意&#xff1a; 有一个蛋糕&#xff0c;分成n∗mn*mn∗m个单位&#xff0c;现在横竖各切三刀&#xff0c;使其分成16个矩阵&#xff0c;使价值最小的矩阵价值最大 输出样例 5 5 95998 21945 23451 99798 74083输入样例 3数据范围 40%的数据&#x…

Music Problem

文章目录题目描述题意&#xff1a;题解&#xff1a;传送时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld 题目描述 Listening to the music is relax, but for obsessive(强迫症), it …

可扩展架构设计的三个维度

业界对于可扩展的系统架构设计有一个朴素的理念,就是&#xff1a;通过加机器就可以解决容量和可用性问题这一理念在“云计算”概念疯狂流行的今天&#xff0c;得到了广泛的认可&#xff01;对于一个规模迅速增长的系统而言&#xff0c;容量和性能问题当然是首当其冲的。但是随着…

.NET Core开发日志——简述路由

有过ASP.NET或其它现代Web框架开发经历的开发者对路由这一名字应该不陌生。如果要用一句话解释什么是路由&#xff0c;可以这样形容&#xff1a;通过对URL的解析&#xff0c;指定相应的处理程序。回忆下在Web Forms应用程序中使用路由的方式&#xff1a;然后是MVC应用程序&…

博客开通

开通博客第一天&#xff0c;纪念一下——

.NetCore Cap 结合 RabbitMQ 实现消息订阅

开源分布式消息框架 Cap 可以在GitHub上拉也可以通过nuget添加上一篇博文写了 Windows RabbitMQ的安装使用 Cap支持事务&#xff0c;通过捕获数据库上下文连接对象实现 消息事务&#xff0c;消息持久化怎么来实现消息订阅 消费&#xff1f;使用起来非常简单&#xff0c;主要通过…

小H和游戏

文章目录题目描述题解&#xff1a;传送时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format:%lld 题目描述 小H正在玩一个战略类游戏&#xff0c;她可以操纵己方的飞机对敌国的N座城市(编号为1~N…

asp.net core 发布到 docker 容器时文件体积过大及服务端口的配置疑问

在 asp.net core 发布时&#xff0c;本人先后产生了3个疑问。1、发布的程序为什么不能在docker容器中运行当时在window开发环境中发布后&#xff0c;dotnet xxx.dll可以正常运行&#xff1b;但放入docker容器后就报 *.*.deps.json not found 的错误。后根据下面的文章解决了问题…

水题(water)(非详细解答)

传送 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld 题目描述 其中&#xff0c;f(1)1;f(2)1;Z皇后的方案数&#xff1a;即在ZZ的棋盘上放置Z个皇后&#xff0c;使其互不攻击的方案数。…

网络流小结

最大流&#xff1a; EK算法&#xff1a; #include<iostream> #include<cstring> #include<cstdio> #include<queue> using namespace std; const int inf0x7fffffff; const int maxn10010; struct node{int u,v,f,next; }edge[300050]; int s,t,cnt,…

.NET MVC CSRF/XSRF 漏洞

最近我跟一个漏洞还有一群阿三干起来了……背景&#xff1a;我的客户是一个世界知名的药企&#xff0c;最近这个客户上台了一位阿三管理者&#xff0c;这个货上线第一个事儿就是要把现有的软件供应商重新洗牌一遍。由于我们的客户关系维护的非常好&#xff0c;直接对口人提前透…

jzoj5057-[GDSOI2017模拟4.13]炮塔【网络流,最大权闭合图】

正题 题面链接:https://gmoj.net/senior/#main/show/5057 题目大意 n∗mn*mn∗m的网格上有一些炮和敌军&#xff0c;每个炮可以攻击在它方向上一个敌军&#xff0c;但是要求炮弹的轨迹不能交叉。求最多打死多少敌军。 解题思路 我们先把炮分成两类&#xff0c;一类是横着打&a…

讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

正文ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性&#xff0c;今天主角就是 ApiControllerAttribute。0. ApiControllerAttribute 继承自 ControllerAttributeASP.NET Core MVC 已经有了ControllerAttribute&#xff0c;这个用来标注一个类型是否是Controller。…

新的UWP和Win32应用程序分发模型

自2005年引入ClickOnce技术以来&#xff0c;.NET就支持应用程序自动升级。在ClickOnce模型中&#xff0c;WinForms和WPF应用程序在启动时会从预先配置好的位置查找新版本。但是&#xff0c;由于微软试图模仿iOS应用商店模型&#xff0c;所以&#xff0c;该模型未能延续到UWP。微…