【C++】开源:CGAL计算几何库配置使用

这篇具有很好参考价值的文章主要介绍了【C++】开源:CGAL计算几何库配置使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍CGAL计算几何库配置使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

😏1. 项目介绍

项目Github地址:https://github.com/CGAL/cgal

CGAL(Computational Geometry Algorithms Library)是一个开源的计算几何算法库,它提供了一套丰富的数据结构和算法来解决各种计算几何问题。它是一个功能强大、可靠、高效且易于使用的库。

CGAL 提供了广泛的计算几何算法和数据结构,包括但不限于以下领域:

1.2D 和 3D 几何:CGAL 提供了各种数据结构和算法,用于处理二维和三维的点、线段、多边形、曲线、曲面等几何对象。它支持凸包计算、点定位、包围盒计算、空间分割等操作。

2.2D 和 3D 三角剖分:CGAL 实现了多种高质量的、高效的三角剖分算法。它支持 Delaunay 三角剖分、Voronoi 图计算、网格重构、约束三角剖分等操作。

3.2D 和 3D 网格生成与处理:CGAL 提供了用于生成和处理网格的算法和数据结构。它支持网格生成、网格布尔运算、网格修复、网格优化、封闭表面重构等操作。

4.几何优化:CGAL 实现了多个几何优化算法,用于求解几何优化问题,如最小凸包、最小旋转包、最长空间线段等。

5.多边形和非封闭曲线处理:CGAL 支持进行多边形布尔运算、多边形修复、多边形拟合、轮廓计算等操作。它还提供了对非封闭曲线的操作和处理。

6.曲面重建:CGAL 提供了多个用于重建曲面的算法,包括点云重建、隐函数重建、流形重建等。这些算法可用于从离散的点集生成平滑的曲面模型。

7.拓扑关系和空间搜索:CGAL 支持计算几何对象之间的拓扑关系,如相交、包含、相交点等。它还提供了用于空间搜索的数据结构和算法,如 kd-树、R 树等。

CGAL 使用 C++ 编写,具有良好的可扩展性和可移植性。它还与其他库和工具集成,在计算机图形学、计算机辅助设计、计算机辅助制造、机器人学、仿真和科学计算等领域得到了广泛应用。

😊2. 环境配置

下面进行环境配置:

apt安装的是老版本4.x,建议源码安装,这里我选的5.1.1.

# apt安装
sudo apt install libcgal-dev
# 源码安装
# 依赖
sudo apt install build-essential libboost-all-dev libgmp-dev libmpfr-dev libopencv-dev
从 `https://github.com/CGAL/cgal/releases/tag/v5.1.1` 下载zip
mkdir build
cd build
cmake -DCGAL_HEADER_ONLY=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALLED_PREFIX=../install ..
make
sudo make install

编译运行:

g++ -o main main.cpp -lCGAL -lgmp
./main

😆3. 使用说明

下面进行使用分析:

计算点集的凸包算法示例:

#include <iostream>
#include <vector>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/convex_hull_2.h>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 Point;
typedef std::vector<Point> PointVector;

int main()
{
    // 创建点向量
    PointVector points, result;

    // 添加一些二维点到点向量中
    points.push_back(Point(1, 1));
    points.push_back(Point(2, 3));
    points.push_back(Point(4, 2));
    points.push_back(Point(3, 1));
    points.push_back(Point(2, 2));
    points.push_back(Point(3, 3));
    points.push_back(Point(3, 2));
    points.push_back(Point(5, 4));
    points.push_back(Point(5, 1));
    points.push_back(Point(4, 3));
    points.push_back(Point(4, 4));

    // 输出点向量
    std::cout << "点集 Points:" << std::endl;
    for (const auto &p : points)
    {
        std::cout << "(" << p.x() << ", " << p.y() << ")" << std::endl;
    }

    // 计算点集的凸包
    CGAL::convex_hull_2(points.begin(), points.end(), std::back_inserter(result));

    // 确定绘制区域的边界框
    double min_x = result[0].x(); 
    double max_x = result[0].x();
    double min_y = result[0].y();
    double max_y = result[0].y();

    // 输出凸包的点坐标
    std::cout << "凸包点 Convex Hull Points:" << std::endl;
    for (const auto &p : result)
    {
        std::cout << "(" << p.x() << ", " << p.y() << ")" << std::endl;
        min_x = std::min(min_x, p.x());
        max_x = std::max(max_x, p.x());
        min_y = std::min(min_y, p.y());
        max_y = std::max(max_y, p.y());
    }

    // 在终端用ASCII字符简单绘制
    int width = static_cast<int>(max_x - min_x) + 1;
    int height = static_cast<int>(max_y - min_y) + 1;

    // 创建并初始化绘制区域
    std::vector<std::vector<char>> canvas(height, std::vector<char>(width, '.'));

    // 在绘制区域上绘制点
    for (const auto& p : result)
    {
        int x = static_cast<int>(p.x() - min_x);
        int y = static_cast<int>(p.y() - min_y);
        canvas[y][x] = '#';
    }

    // 输出绘制结果
    std::cout << "绘制结果 #为凸包点: " << std::endl;
    for (int y = height - 1; y >= 0; --y)
    {
        for (int x = 0; x < width; ++x)
        {
            std::cout << canvas[y][x];
        }
        std::cout << std::endl;
    }

    return 0;
}

结果:

点集 Points:
(1, 1)
(2, 3)
(4, 2)
(3, 1)
(2, 2)
(3, 3)
(3, 2)
(5, 4)
(5, 1)
(4, 3)
(4, 4)
凸包点 Convex Hull Points:
(1, 1)
(5, 1)
(5, 4)
(4, 4)
(2, 3)
绘制结果 #为凸包点: 
...##
.#...
.....
#...#

【C++】开源:CGAL计算几何库配置使用,# c++开源项目学习,c++,开源,开发语言

以上。文章来源地址https://www.toymoban.com/news/detail-637377.html

到了这里,关于【C++】开源:CGAL计算几何库配置使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】开源:Muduo网络库配置与使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍Muduo网络库配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/chenshuo/muduo Muduo 是一个基于

    2024年02月15日
    浏览(25)
  • 【C++】开源:Boost库常用组件配置使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍Boost库常用组件配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/boostorg/boost Boost库在线书籍

    2024年02月15日
    浏览(38)
  • 【C++】开源:Boost网络库Asio配置使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍Asio网络库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/boostorg/asio Boost.Asio 是一个用于

    2024年02月15日
    浏览(34)
  • 【C++】开源:事件驱动网络库libevent配置使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍事件驱动库libevent配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/libevent/libevent 官网:

    2024年02月14日
    浏览(32)
  • 【C++】开源:Redis数据库配置与使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍Redis数据库配置与使用。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/redis/redis Redis(Remote Dict

    2024年02月15日
    浏览(34)
  • 【C++】开源:tinyxml2解析库配置使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍tinyxml2解析库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 tinyxml2 是一个轻量级的C++库,用于解析和生成XML文档。它是

    2024年02月14日
    浏览(23)
  • 【C++】开源:MQTT安装与配置使用(mosquitto)

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍MQTT安装与配置使用。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习知识,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 官网: https://mqtt.org/ MQTT 是一个基于 客户端-服务器 的 消息发布/订阅传

    2024年02月04日
    浏览(35)
  • 【计算几何】判断一条线段和一段圆弧是否相交 & C++代码实现

    最近做项目,需要判断一条线段是否和一段圆弧相交,网上也没找到很好的解答(最主要是没有直接可以搬来用的代码,或者思路写得太过高深,我看不懂),于是决定自己想一个方法,写一个博客,将实现思路和完整代码都分享出来 线段可用两个点表示,点的对象如下所示

    2024年02月01日
    浏览(52)
  • 【C++】开源:sqlite3数据库配置使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍sqlite3数据库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/sqlite/sqlite SQLite 是一种嵌入式

    2024年02月14日
    浏览(42)
  • 【C++】开源:gflags命令行参数解析库配置使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍gflags命令行参数解析库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/gflags/gflags gflags(

    2024年02月13日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包