CGAL中2D Arrangements学习笔记

2023-10-30

 

 

CGAL2D Arrangements学习笔记

转载自:http://hi.baidu.com/lihao102/blog/item/33015f63b69b3b6a0c33fab6.html

 

2D Arrangement类型简介:

给定一组平面曲线,2D Arrangement能够将这组曲线所组成的图形细分成顶点、边和面这些最基本的几何单位。其中给定的曲线能够相互相交,甚至能自相交。其组成的图形在2D Arrangemen中描述成双边连接数据结构(doubly-connected edge list data-structure (D CEL for short))即把一条边变成两条半边来描述,其中,这个数据结构包含了对顶点、边、面的描述。

如上图,通过线段构造的2D Arrangements表现成了顶点(vn)、边(un)、面(fn)的形式。 其中f0是一个没有被包装的面(un_bound),其余都是被包装的面,其中f2为普通的面,f1中包含两个洞f3和f4。至于顶点和边,在这里就不多说了,很简单。需要说明的是对于f0面来说,所有里面的(即f1+f2)组成的为其一个洞。

一个面的边界由一系列的边和点组成,我们称其为a connected component of the boundary(or CCB for short)。这个CCB我们是可以迭代的访问其组成的边和顶点的。

2D Arrangement类型基本使用方法:

1、构造组成
经过研究,2D Arrangement主要由内核、DCEL描述和数据类型组成,其中CGAL提供N种内核来构造一个ARRANGMENT,而我们要用到的基本上就是二维空间中ARRANGMENT的应用,即ARRANGMENT_2,所以下面所说明和讨论的都是基于ARRANGMENT_2的;

在所有的内核之中,据文档介绍Arr_segment_traits_2是一种效率高的内核,所以我也主要以其为研究对象。DCEL一般的就是用默认的DCEL足够了,数据类型则用CGAL::MP_Float。

2、迭代访问
我们可以通过给定的迭代器来访问2D Arrangement。如下代码
template<class Arrangement>
void print_arrangement (const Arrangement& arr)
{
CGAL_precondition (arr.is_valid());
// Print the arrangement vertices.
typename Arrangement::Vertex_const_iterator vit;
std::cout << arr.number_of_vertices() << " vertices:" << std::endl;
for (vit = arr.vertices_begin(); vit != arr.vertices_end(); ++vit)
{
std::cout << "(" << vit->point() << ")";
if (vit->is_isolated())
std::cout << " - Isolated." << std::endl;
else
std::cout << " - degree " << vit->degree() << std::endl;
}

// Print the arrangement edges.
typename Arrangement::Edge_const_iterator    eit;
std::cout << arr.number_of_edges() << " edges:" << std::endl;
for (eit = arr.edges_begin(); eit != arr.edges_end(); ++eit)
std::cout << "[" << eit->curve() << "]" << std::endl;

// Print the arrangement faces.
typename Arrangement::Face_const_iterator    fit;
std::cout << arr.number_of_faces() << " faces:" << std::endl;
for (fit = arr.faces_begin(); fit != arr.faces_end(); ++fit)
print_face<Arrangement> (fit);
return;
}

注:arrangement操作方法比较简单,总有来说就是把一组线段插入到一个arrangement对象中,arrangement会自然的构造DCEL结构来描述线段所能组成的图形(不同的图形复杂度,构造需要的时间也不同),然后就可以迭代的访问其中的几何对象了。

经过研究,arrangement对于相交线段与非相交线段的处理方法,可以是不同的(不同的插入处理),见其例子

经过以上分析,就需要针对我们软件中的例子,进行抽象建模。我们的需求是,给定一组线,找出最小区域和最大外包。仔细一分析,CGAL中的arrangement类完全可以满足我们的需求。对于arrangement也是通过一组线段,就能求出其对应的面(这里可以对应我们的最小区域和最大外包),但在arrangement中只有面的概念,那么怎么样区分最小区域和最大外包呢,上文中提到过,所谓最大外包就是对应的最外面一个面,这个面是un_bound的,其余的面,也是就最小区域是被bound的,所以,针对我们的问题,这个标记应该就能够解决的。

现在的问题就是,我们采用哪一种方法来处理一组线段,是我们在外面自己离散?还是输入最基本的数据,让arrangement自己去离散?这就在于,是自己的离散算法效率高,还是arrangement的效率高。不管怎么样,我们首先还是用一组数据和结果来说明(以下数据采自己CGAL的两个例子。

其中,图A是没有离散的数据,图B是离散了的数据。运行结果如下:

A

B

其中构造图Aarrangement花了11秒多,而构造图Barrangement只花了半秒多。当然,这两份数据不是描述一个图,所以也只仅做参考和学习之用,但这说明了,arrangement对线段离散的时间和线段的复杂性是成正比的。

下面,我将自己构造的数据来说明两者的差据。(数据为横、竖各一百条线组成的简单轴网):

首先是离散了的数据的运行结果:

然后是没有离散的数据运行结果

从这份数据来看,对于简单的线段复杂度,离散与非离散数据表现出来的差异并不是很大。

但我相信,也不能完全根据这份数据盲目的判断,我将加入一些曲线,来判断运行的时间,关于结果,下次再贴。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CGAL中2D Arrangements学习笔记 的相关文章

随机推荐

  • VMware虚拟机提示找不到vmnetbridge.dll

    找了很多文章多半是提示重新安装 有的说该文件在C WINDOWS inf目录下 然而我的不在该目录下 我的方法是先在本机中找找该文件在不在电脑中存在 使用工具是Everything 的确是有的 找到选择该目录就可以了噢 每个人电脑中可能是有
  • 查询IP地址可得到哪些信息

    通过IP地址定位 可以获取一些基本的信息 包括以下内容 1 地理位置 你可以确定IP地址所在的地理位置 包括国家 州或省 城市和地理坐标 这通常是通过将IP地址与地理位置数据库进行匹配来实现的 2 ISP 互联网服务提供商 信息 你可以了解
  • DVWA靶场通关教程

    目录 Burt Force 爆破 low medium high impossible Command Injection 命令执行 low medium high impossible CSRF 跨站请求攻击 low medium hig
  • NUC980开源项目21-开启网络连接

    上面是我的微信和QQ群 欢迎新朋友的加入 项目码云地址 国内下载速度快 https gitee com jun626 nuc980 open source project 项目github地址 https github com Jun117
  • 小程序更换navigationBarBackgroundColor导航栏背景色

    阐述 有些项目并不想让小程序的导航的颜色是纯色的 想要更换颜色 那么就用到的 navigationBarBackgroundColor 这个参数 具体看下以下设置方法 设置导航栏颜色 有时候我们在单页面设置的 navigationBarBa
  • 数据库连接池原理之(一):通俗易懂的数据库连接池原理以及实现机制讲解

    本篇内容综合广大网友提供内容 笔者经过整理 对数据库连接池原理和实现过程做个很系统的并且通俗易懂的分析讲解 以及手写一个连接池实现过程作为演示 一 早期通过JDBC方式操作数据库 我们先来看早期使用JDBC的方式操作数据库的过程 这里以my
  • 迅速响应!国家互联网信息办公室发布关于《生成式人工智能服务管理办法(征求意见稿)》公开征求意见的通知

    4月11日 为促进生成式人工智能技术健康发展和规范应用 国家互联网信息办公室发布 生成式人工智能服务管理办法 征求意见稿 向社会公开征求意见 意见稿首先指出 国家支持人工智能算法 框架等基础技术的自主创新 推广应用 国际合作 鼓励优先采用安
  • BigDecimal 转字符串,并去掉尾部的0

    有一种写法 先转成Double BigDecimal target new BigDecimal 5375130 000000 BigDecimal valueOf Double parseDouble target toString to
  • spark中shuffle运行原理

    ShuffleManager里有四个接口 register reader writer和stop 核心接口则是reader和writer 当前版本reader接口只有1个实现 writer接口有3个实现 每种实现分别对应不同的场景 writ
  • LightGBM 重要参数、方法、函数理解及调参思路、网格搜索(附例子)

    文章目录 一 LightGBM 原生接口 重要参数 训练参数 预测方法 绘制特征重要性 分类例子 回归例子 二 LightGBM 的 sklearn 风格接口 LGBMClassifier 基本使用 例子 LGBMRegressor 基本使
  • 一个华科研究生导师的肺腑之言(主要适用于理工科)

    一个华科研究生导师的肺腑之言 主要适用于理工科 各位科研同志们看看吧 仁者见仁智者见智 总归有点用 人太多 不一一 啦 1 作为你们的老师 我现在每周工作60小时 踏踏实实的60小时 阅读 实践 思考 讨论和请教 周而复始 其实这还不够用
  • [课程复习] 数据结构之经典题目回顾 (一)选择题、填空题1

    作者最近在复习考博 乘此机会分享一些计算机科学与技术 软件工程等相关专业课程考题 一方面分享给考研 考博 找工作的博友 另一方面也是自己今后完成这些课程的复习资料 同时也是在线笔记 基础知识 希望对您有所帮助 不喜勿喷 文章目录 一 基础
  • IntelliJ IDEA使用Alibaba Java Coding Guidelines编码规约扫描插件

    代码规范和编码规约扫描插件使用 为什么要有代码规范 1 代码规范插件 2 idea插件安装 3 插件使用介绍 编码规约扫描使用 编码规约扫描结果 4 扫描结果严重级别 Blocker Critical Major 5 阿里巴巴Java开发手
  • 《机器学习西瓜书》学习笔记——第三章_线性模型_类别不平衡问题

    类别不平衡是指分类任务中不同类别的训练样例数目相差很大 现有技术大体上有三类做法解决此问题 1 欠采样 2 过采样 3 阈值移动 再缩放 1 欠采样 直接对训练集里的反类样例进行欠采样 即去除一些反例使得正反例数目接近 然后再进行学习 欠采
  • Windows 下配置 Eclipse 连接 Hadoop 开发环境

    Windows 下配置 Eclipse 连接 Hadoop 开发环境 个人小站 正在持续整理中 欢迎访问 http shitouer cn 小站博文地址 Windows 下配置 Eclipse 连接 Hadoop 开发环境 欢迎原站访问 学
  • 从0到1,小白的前端摸索之路,属于你的成功之道!

    0基础 一年自学经验 8个offer 包括头条 去哪儿 猫眼 斗鱼 趣店 趣头条等 总价值180W 朋友们 大家好 我是白小白 目前是一名电子科技大学信通学院的大四学生 回想起自己正式涉足前端的学习 已然过去一年又几 这一年里 有困惑 迷茫
  • Spring基础篇-AOP的使用!

    了解AOP aop是面向切面编程 算是对面向对象的一种补充 概念性的东西这里就不赘述了 aop的本质 实际上就是JDK动态代理和CGLIB动态代理 而动态代理 实际上分为两种 运行时增强和编译时增强 我们这里了解的 就是运行时增强 首先 我
  • Java简介和发展史

    Java简介和发展史 1 JAVA发展史 计算机硬件发展的同时 软件始终伴随其步伐迅猛发展 就计算机的编程语言而言 也划分为三代 第一代 机器语言 每条指令用二进制编码 效率很低 第二代 汇编语言 用符号编程 和具体机器指令有关 效率不高
  • 【超分辨】SRGAN详解及其pytorch代码解释

    SRGAN详解 介绍 网络结构 损失函数 数据处理 网络训练 介绍 2023年更新 本代码是学习参考代码 一般不能直接运行 想找现成能运行的建议看看其他的 SRGAN是一个超分辨网络 利用生成对抗网络的方法实现图片的超分辨 关于生成对抗网络
  • CGAL中2D Arrangements学习笔记

    CGAL中2D Arrangements学习笔记 转载自 http hi baidu com lihao102 blog item 33015f63b69b3b6a0c33fab6 html 2D Arrangement类型简介 给定一组平