CGAL::2D Arrangements-4

2024-02-08 20:20
文章标签 2d cgal arrangements

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

4. Free函数

Arrangement_on_surface_2类模板是用曲线切分二维的面。因为它的接口设计是最简化的,这意味着它的成员函数很少执行几何操作。本章将解释怎么利用这些Free function来达到Arrangement操作。执行这些操作通常需要优秀的几何算法,而且有时会对几何traits类增加额外的要求。这些操作很多都是基于2个框架:面扫描(surface sweep)和区域构建(zone contructions)。这些操作接收一个x单调的曲线,因此几何特征类(geometry-traits class)可以被Arrangement当入参和出参,这些操作必须是ArrangementXMonotoneTraits_2概念的一个model。

4.1 区域构建算法
4.1.1 插入一对不相交的曲线
4.1.2 插入X单调的曲线
4.1.3 插入一般曲线
4.1.4 插入点集
4.1.5 插入相交的线段(code example)

文件在Arrangement_on_surface_2/incremental_insertion.cpp

代码段如下:

// Using the global incremental insertion functions.
#include <CGAL/basic.h>
#include <CGAL/Arr_naive_point_location.h>
#include "arr_exact_construction_segments.h"
#include "arr_print.h"
typedef CGAL::Arr_naive_point_location<Arrangement>             Naive_pl;
typedef CGAL::Arr_point_location_result<Arrangement>::Type      Pl_result_type;
int main() {// Construct the arrangement of five intersecting segments.Arrangement arr;Naive_pl pl(arr);Segment s1(Point(1, 0), Point(2, 4));Segment s2(Point(5, 0), Point(5, 5));Segment s3(Point(1, 0), Point(5, 3));Segment s4(Point(0, 2), Point(6, 0));Segment s5(Point(3, 0), Point(5, 5));auto e = insert_non_intersecting_curve(arr, s1, pl);insert_non_intersecting_curve(arr, s2, pl);insert(arr, s3, Pl_result_type(e->source()));insert(arr, s4, pl);insert(arr, s5, pl);print_arrangement_size(arr);// Perform a point-location query on the resulting arrangement and print// the boundary of the face that contains it.Point q(4, 1);auto obj = pl.locate(q);auto* f = boost::get<Arrangement::Face_const_handle>(&obj);std::cout << "The query point (" << q << ") is located in: ";print_face<Arrangement>(*f);return 0;
}
4.2 另外的区域关联函数
4.3 面扫描算法
4.4 删除点和边
4.5 垂直分解

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



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

相关文章

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激光点云识别退化场景(长走廊)

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