CGAL::2D Arrangements-2

2024-02-07 22:12
文章标签 2d cgal arrangements

本文主要是介绍CGAL::2D Arrangements-2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2.3.2 遍历Arrangement Halfedge

Arrangement的一条Halfedge是和一个 X_monotone_curve_2对象绑定,这个curve可以通过e->curve()获取。

e->source()得到源点,e->target()得到目标点,e->twin()得到半边的对边,

 第个半边都有一个关联面(incident face),这个关联面在半边的左边,可以通过e->face()获取到。

e->prev()和e->next(),得到关联的上一条和下一条半边。

下面是遍历一个face的halfedge代码段:

template <typename Arrangement>
void print_ccb(typename Arrangement::Ccb_halfedge_const_circulator circ) {Ccb_halfedge_const_circulator curr = circ;std::cout << "(" << curr->source()->point() << ")";do {typename Arrangement::Halfedge_const_handle he = curr->handle();std::cout << " [" << e->curve() << "] "<< "(" << e->target()->point() << ")";} while (++curr != circ);std::cout << std::endl;
}
2.3.3 遍历Arrangement Face

一个Arrangement_2对象arr始终有一个unbounded face,通过arr.unbounded_face()可以拿到,空的Arrangement_2也有一个unbounded face。

通过f->is_unboudned()可以确定一个face是否有边界,有边界的face有一个outer CCB。

下面是遍历face的代码段:

template <typename Arrangement>
void print_face(typename Arrangement::Face_const_handle f) {// Print the outer boundary.if (f->is_unbounded()) std::cout << "Unbounded face.\n";else {std::cout << "Outer boundary: ";print_ccb(f->outer_ccb());}// Print the boundary of each of the holes.size_t index = 1;for (auto hi = f->holes_begin(); hi != f->holes_end(); ++hi) {std::cout << " Hole #" << index++ << ": ";print_ccb(*hi);}// Print the isolated vertices.index = 1;for (auto iv = f->isolated_vertices_begin();iv != f->isolated_vertices_end(); ++iv){std::cout << " Isolated vertex #" << index++ << ": "<< "(" << iv->point() << ")\n";}
}

遍历整个Arrangement的代码段如下:

void print_arrangement (const Arrangement_2& arr) {// Print the arrangement vertices.std::cout << arr.number_of_vertices() << " vertices:\n";for (auto vit = arr.vertices_begin(); vit != arr.vertices_end(); ++vit) {std::cout << "(" << vit->point() << ")";if (vit->is_isolated()) std::cout << " - Isolated.\n";else std::cout << " - degree " << vit->degree() << std::endl;}// Print the arrangement edges.std::cout << arr.number_of_edges() << " edges:\n";for (auto eit = arr.edges_begin(); eit != arr.edges_end(); ++eit)std::cout << "[" << eit->curve() << "]\n";// Print the arrangement faces.std::cout << arr.number_of_faces() << " faces:\n";for (auto fit = arr.faces_begin(); fit != arr.faces_end(); ++fit)print_face(fit);
}
2.4修改Arrangement
2.5插入一对不相连的x_Monotone Curves

这篇关于CGAL::2D Arrangements-2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/689078

相关文章

Matter.js:Web开发者的2D物理引擎

Matter.js:Web开发者的2D物理引擎 前言 在现代网页开发中,交互性和动态效果是提升用户体验的关键因素。 Matter.js,一个专为网页设计的2D物理引擎,为开发者提供了一种简单而强大的方式,来实现复杂的物理交互效果。 无论是模拟重力、碰撞还是复杂的物体运动,Matter.js 都能轻松应对。 本文将带你深入了解 Matter.js ,并提供实际的代码示例,让你一窥其强大功能

Unity3D在2D游戏中获取触屏物体的方法

我们的需求是: 假如屏幕中一个棋盘,每个棋子是button构成的,我们希望手指或者鼠标在哪里,就显示那个位置的button信息。 网上有很多获取触屏物体信息的信息的方法如下面代码所示: Camera cam = Camera.main; // pre-defined...if (touch.phase == TouchPhase.Bagan)){ // 如果触控点状态为按下Ray

学习CGAL:配置QT支持

发现问题 在之前的博客《学习CGAL:编译第一个工程》中,我成功生成了工程并编译,也貌似成功让CGAL的算法执行了。不过,我在执行工程中的draw_triangulation_2项目时,好像并没有达到期望的效果: 看起来这个程序应该能“画”出来什么东西,然而现在失败了。我想,这是因为CGAL本身只是包含算法的,要想可视化必须额外做些事情。 回头看官方文档可以发现,其实它已经提示了:很多CGA

学习CGAL:编译第一个工程

前言 CGAL对现在的我来说是个新的东西,我对他的用法用途都一无所知。但从他的名字:The Computational Geometry Algorithms Library看起来,应该是和图形学算法相关的,因此我有很强的兴趣。 首先,我想跟着官方指引下载安装,并尝试运行起来第一个范例。 1.安装boost CGAL强依赖于 Boost ,二进制库可以在SourceForge中找到。boos

ModuleNotFoundError: No module named ‘diffusers.models.dual_transformer_2d‘解决方法

Python应用运行报错,部分错误信息如下: Traceback (most recent call last): File “\pipelines_ootd\unet_vton_2d_blocks.py”, line 29, in from diffusers.models.dual_transformer_2d import DualTransformer2DModel ModuleNotF

[LeetCode] 240. Search a 2D Matrix II

题:https://leetcode.com/problems/search-a-2d-matrix-ii/description/ 题目 Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: Integers i

CSS-transform【上】(2D转换)【看这一篇就够了!!!】

目录 transform属性 transform的2D变换函数 transform的3D转换属性值 2D转换 translate位移 translate(x,y) x,y为px长度单位 x,y为%百分比 y值不写,默认为0 translateX(x)与translateY(y) translate与绝对定位结合实现元素水平垂直居中 scale(x,y) 百分比单位 sc

鸿蒙(API 12 Beta6版)图形【NativeImage开发指导 (C/C++)】方舟2D图形服务

场景介绍 NativeImage是提供Surface关联OpenGL外部纹理的模块,表示图形队列的消费者端。开发者可以通过NativeImage接口接收和使用Buffer,并将Buffer关联输出到OpenGL外部纹理。 针对NativeImage,常见的开发场景如下: 通过NativeImage提供的Native API接口创建NativeImage实例作为消费者端,获取与该实例对应的Na

2d激光反光贴提取

2d激光数据有距离和强度两种数据,强度描述物体材质 。 当在长走廊环境或者动态环境(立体仓库)中,传统基于地图的slam将不在适用,agv行业通常使用反光贴和二维码保证slam可靠性 void HanderReflectors(const sensor::LaserFan& laser_fan, sensor::PointCloud * reflectors) {// 构建反光贴,遍历所有点云,

2d激光点云识别退化场景(长走廊)

注:算法只适用于静态场景,在有动态场景(行人)的环境下不适用 退化场景描述 场景一:长走廊 激光探测距离有限,在长走廊环境下,激光在某些位置无法探测到走廊尽头,会出现如上图情况,激光轮廓为红色的两条平行线。对于这种情况,我们只需寻找到只有两个平行线,即位退化场景 场景二:单一墙面 通常情况下,退化场景为如上两种情况,当然多条平行线也是符合的。 算法思路为,如果激光雷达点云构成的特征都是平行线