C-11 三角剖分的调研

C-11 三角剖分算法

  • 三角剖分就是将输入的多边形,分割成一系列互不重叠的三角形,其重要性就在这不多赘述。
  • 这个是一个别人总结的链接:http://vterrain.org/Implementation/Libs/triangulate.html
    在这里插入图片描述

图片链接:http://www-cgrl.cs.mcgill.ca/~godfried/teaching/cg-projects/97/Thierry/thierry507webprj/complexity.htm

耳切割算法 (eat-cut) O ( n 3 ) O(n^3) O(n3)

  • 可以生成带孔多边形的算法
  • GitHub地址: https://github.com/mapbox/earcut.hpp
  • 这是生成凹多边形的算法,简单来说,凹下去的那一个顶点就是耳朵,先生成多边形的凸包,然后找到该多边形上凹下去的顶点,把那部分给“切”掉,这就是而且个算法

image-20240516135313203

#include <earcut.hpp>// The number type to use for tessellation
using Coord = double;// The index type. Defaults to uint32_t, but you can also pass uint16_t if you know that your
// data won't have more than 65536 vertices.
using N = uint32_t;// 创建多边形
using Point = std::array<Coord, 2>;
std::vector<std::vector<Point>> polygon;//放入轮廓线
polygon.push_back({{100, 0}, {100, 100}, {0, 100}, {0, 0}});
//放入洞,除了第一条线是轮廓线之外,从第二条线开始就是洞线了
polygon.push_back({{75, 25}, {75, 75}, {25, 75}, {25, 25}});//返回索引值
std::vector<N> indices = mapbox::earcut<N>(polygon);
//读取索引值就是离散化完成的三角形了

Delaunay三角剖分算法 O ( n log ⁡ n ) O(n\log n) O(nlogn)

  • 普通的Delaunay三角剖分算法不能对带孔多边形进行三角剖分

约束Delaunay三角剖分算法 (CDT) O ( n log ⁡ n + m log ⁡ n ) O(n\log n+m\log n) O(nlogn+mlogn)

image-20240516131505621

  • CGAL几何库采用的就是这种三角剖分算法,因此无论是时间上还是稳定性上这种算法都是值得信赖的
  • 时间复杂度中的m是指轮廓边和孔洞边的数量
  • GitHub地址: https://github.com/artem-ogre/CDT
  • 算法步骤
    • 和Delaunay一样 先生成super triangle
    • 然后剔除super triangle带来的边
    • 剔除外轮廓边之外的边
    • 剔除孔洞之中的边

image-20240516165510858

image-20240516165618868

单调多边形三角化

  • 这个我也没大看懂,也没有自己代码实现过,所以不敢妄言
  • 简单的说一说就是把一个多边形分成若干个单调多边形(Monotone Polygon)。然后将单调多边形进行三角剖分
  • 单调多边形是指一个有两条链子组成的多边形,然后两条链子上的顶点的纵坐标是递增的或者横坐标是递增的。比如下面是一个y单调多边形,就是纵坐标递增。坐标相等也算递增,比如长方形也是单调多边形。
  • 这个思想就很有意思,就如同红黑树一样,介于平衡二叉树和普通二叉树之间。单调多边形就介于凸多边形和凹多边形之间。凸多边形必然是一个单调多边形,而凹多边形就不一定了。
  • 把一个多边形分成单调多边形的过程(line sweep)的时间复杂度是O(nlogn),而对一个单调多边形进行三角划分的时间复杂度是O(n);
  • https://www.cnblogs.com/dogstar/archive/2011/04/07/2008726.html 这个大佬的博客有多边形单调划分相关步骤的说明。也有单调多边形三角化的说明,可以看看
  • 在计算几何算法与应用这本书里面,也有算法的详细说明
  • 《计算几何算法与应用(第三版)》 链接:https://pan.baidu.com/s/1exLpWuD5cBcZGasWH8Y3_w 提取码:6666请添加图片描述

在这里插入图片描述
在这里插入图片描述

其他的剖分算法

  • https://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml
  • http://www.cs.unc.edu/~dm/CODE/GEM/chapter.html

参考资料

  • 一个多边形三角剖分汇总网站 http://vterrain.org/Implementation/Libs/triangulate.html
  • 《J. O’Rourke, Computational in C, 2nd Edition》链接:https://pan.baidu.com/s/1E4tYKPJ2miU9OXRpw0tWng 提取码:6666

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

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

相关文章

基于CentOS Stream 9平台搭建MinIO以及开机自启

1. 官网 https://min.io/download?licenseagpl&platformlinux 1.1 下载二进制包 指定目录下载 cd /opt/coisini/ wget https://dl.min.io/server/minio/release/linux-amd64/minio1.2 文件赋权 chmod x /opt/coisini/minio1.3 创建Minio存储数据目录&#xff1a; mkdi…

springboot校园安全通事件报告小程序-计算机毕业设计源码02445

Springboot 校园安全通事件报告小程序系统 摘 要 随着中国经济的飞速增长&#xff0c;消费者的智能化水平不断提高&#xff0c;许多智能手机和相关的软件正在得到更多的关注和支持。其中&#xff0c;校园安全通事件报告小程序系统更是深得消费者的喜爱&#xff0c;它的出现极大…

《Programming from the Ground Up》阅读笔记:p19-p48

《Programming from the Ground Up》学习第2天&#xff0c;p19-p48总结&#xff0c;总计30页。 一、技术总结 1.object file p20, An object file is code that is in the machine’s language, but has not been completely put together。 之前在很多地方都看到object fi…

Git使用中遇到的问题(随时更新)

问题1.先创建本地库&#xff0c;后拉取远程仓库时上传失败的问题怎么解决&#xff1f; 操作主要步骤&#xff1a; step1 设置远程仓库地址: $ git remote add origin gitgitee.com:yourAccount/reponamexxx.git step2 推送到远程仓库: $ git push -u origin "master&qu…

线程池理解及7个参数

定义理解 线程池其实是一种池化的技术实现&#xff0c;池化技术的核心思想就是实现资源的复用&#xff0c;避免资源的重复创建和销毁带来的性能开销。线程池可以管理一堆线程&#xff0c;让线程执行完任务之后不进行销毁&#xff0c;而是继续去处理其它线程已经提交的任务。 …

GStreamer学习5----probe数据探测

参考资料&#xff1a; gstreamer中如何使用probe&#xff08;探针&#xff09;获取帧数据_gstreamer 视频编码时获取视频关键帧信息-CSDN博客 Gstreamer中可以使用AppSink作为一个分支来查看管线中的数据&#xff0c;还可以使用probe去处理。 在GStreamer中&#xff0c;probe…

LayerNorm Plugin的使用与说明

目录 前言0. 简述1. Layernorm Plugin的使用1.1 源码下载1.2 模型下载和修改1.3 环境配置1.4 编译1.4 engine生成和执行(trtexec)1.5 enging生成和执行(C API) 2. 补充说明2.1 RTMO显存占用问题2.2 插件找不到的说明2.3 LayerNorm plugin封装的尝试2.4 layerNorm plugin核函数实…

拉曼光谱入门:3.拉曼光谱的特征参数与定量定性分析策略

1.特征参数 1.1 退偏振率 退偏振率&#xff08;p&#xff09;是一个衡量拉曼散射光偏振状态的参数&#xff0c;它描述了拉曼散射光的偏振方向与入射光偏振方向之间的关系。退偏振率定义为垂直偏振方向的拉曼散射强度与平行偏振方向的拉曼散射强度之比。退偏振率&#xff08;p&…

禁用windows的语音识别快捷键win+ctrl+s

win11组合键winctrls会弹出语音识别提示&#xff0c;即使到设置里禁用了语音识别也没用 解决办法&#xff1a;安装PowerToys&#xff0c;通过“键盘管理器”-“重新映射快捷键”禁用 PowerToys是微软自己的工具&#xff0c;不用担心安全问题&#xff0c;下载地址&#xff1a;h…

第10章:网络与信息安全

目录 第10章&#xff1a;网络与信息安全 网络概述 计算机网络概念 计算机网络的分类 网络的拓扑结构 ISO/OSI网络体系结构 网络互联硬件 物理层互联设备 数据链路层互联设备 网络层互联设备 应用层互联设备 网络的协议与标准 网络标准 TCP/IP协议族 网络接口层协…

【JAVA多线程】线程池概论

目录 1.概述 2.ThreadPoolExector 2.1.参数 2.2.新任务提交流程 2.3.拒绝策略 2.4.代码示例 1.概述 线程池的核心&#xff1a; 线程池的实现原理是个标准的生产消费者模型&#xff0c;调用方不停向线程池中写数据&#xff0c;线程池中的线程组不停从队列中取任务。 实现…

最新版Python安装教程

一、安装Python 1.下载Python 访问Python官网&#xff1a; https:/www.oython.orgl 点击downloads按钮&#xff0c;在下拉框中选择系统类型(windows/Mac OS./Linux等) 选择下载最新稳定版本的Python 以下内容以演示安装Windows操作系统64位的python 左边是稳定发布版本Stabl…

python网络编程-TCP/IP

链路层 帧组成&#xff08;按顺序&#xff09;&#xff1a; 目标MAC&#xff1a;6B 源MAC&#xff1a;6B 类型&#xff1a;2B 数据&#xff1a;46B-1500B CRC&#xff1a;4B 其中&#xff0c;源MAC为主机网卡地址&#xff0c;类型为来源网络层的数据类型&#xff0c;ipv…

如何有效管理你的Facebook时间线?

Facebook作为全球最大的社交平台之一&#xff0c;每天都有大量的信息和内容在用户的时间线上展示。有效管理你的Facebook时间线&#xff0c;不仅可以提升用户体验&#xff0c;还能够帮助你更好地控制信息流和社交互动。本文将探讨多种方法和技巧&#xff0c;帮助你有效管理个人…

分班结果老师怎么发给家长?

分班结果老师怎么发给家长&#xff1f; 随着新学期的脚步渐近&#xff0c;老师们的工作也变得愈发繁忙。从准备教学计划到整理课程材料&#xff0c;每一项任务都不容小觑。而其中&#xff0c;分班结果的告知工作&#xff0c;更是让不少老师头疼不已。传统的分班通知方式&#…

Python爬虫与数据可视化:构建完整的数据采集与分析流程

Python爬虫技术概述 Python爬虫是一种自动化的数据采集工具&#xff0c;它可以模拟浏览器行为&#xff0c;访问网页并提取所需信息。Python爬虫的实现通常涉及以下几个步骤&#xff1a; 发送网页请求&#xff1a;使用requests库向目标网站发送HTTP请求。获取网页内容&#xf…

15集终于编译成功了-了个球!编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》

15集终于编译成功了-个球&#xff01;编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》 还是参考这个官方文档&#xff1a; https://codelabs.developers.google.cn/codelabs/sparkfun-tensorflow#2 全是干货&#xff01; 这里面提到的这个Micro工程已经移开了&#xff1…

【微服务】springboot对接Prometheus指标监控使用详解

目录 一、前言 二、微服务监控概述 2.1 微服务常用监控指标 2.2 微服务常用指标监控工具 2.3 微服务使用Prometheus监控优势 三、环境准备 3.1 部署Prometheus服务 3.2 部署Grafana 服务 3.3 提前搭建springboot工程 3.3.1 引入基础依赖 3.3.2 配置Actuator 端点 3.…

【Linux】信号的处理

你很自由 充满了无限可能 这是很棒的事 我衷心祈祷你可以相信自己 无悔地燃烧自己的人生 -- 东野圭吾 《解忧杂货店》 信号的处理 1 信号的处理2 内核态 VS 用户态3 键盘输入数据的过程4 如何理解OS如何正常的运行5 如何进行信号捕捉信号处理的总结6 可重入函数volatile关…

C# 如何获取属性的displayName的3种方式

文章目录 1. 使用特性直接访问2. 使用GetCustomAttribute()方法通过反射获取3. 使用LINQ查询总结和比较 在C#中&#xff0c;获取属性的displayName可以通过多种方式实现&#xff0c;包括使用特性、反射和LINQ。下面我将分别展示每种方法&#xff0c;并提供具体的示例代码。 1.…