CGAL 计算几何库

第一步实现 CMakeLists.txt 的配置,基于 QT编译器进行开发

cmake_minimum_required(VERSION 3.5)

project(CGAL_Test LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)


find_package(CGAL REQUIRED)
if(CGAL_FOUND)
    include_directories(${CGAL_DIR}/include/CGAL)
    link_directories(${CGAL_LIBRARIES_DIR})
    set(CGAL_LIBS "-lCGAL -lCGAL_Core -lgmp -lmpfr")
    set(HAVE_CGAL True)
    message(STATUS "Configure package with cgal!")
else()
    set(HAVE_CGAL False)
    message(STATUS "Configure package without cgal!")
endif()


# OpenCV4.1

set(OpenCV_DIR "/usr/local")
message(STATUS ${OpenCV_DIR})

find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
    include_directories(${OpenCV_DIR}/include/opencv2)
    include_directories( ${OpenCV_INCLUDE_DIRS})
    link_directories(${OpenCV_DIR}/lib)
    message(STATUS "Configure package with OpenCV!")
    set(HAVE_OpenCV True)
else()
    set(HAVE_OpenCV False)
    message(STATUS "Configure package without OpenCV!")
endif()


# OpenGL

find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
if(OpenGL_FOUND)
    include_directories( ${OPENGL_INCLUDE_DIRS}  ${GLUT_INCLUDE_DIRS} )
    set(HAVE_OpenGL True)
    message(STATUS "Configure package with OpenGL!")
else()
    set(HAVE_OpenGL False)
    message(STATUS "Configure package without OpenGL!")
endif()

# VTK
find_package(VTK REQUIRED)
if(VTK_FOUND)
    include(${VTK_USE_FILE})
    include_directories(${VTK_INCLUDE_DIRS})
    link_directories(${VTK_LIBRARIES_DIR})
    set(HAVE_VTK True)
    message(STATUS "Configure package with VTK!")
else()
    set(HAVE_VTK False)
    message(STATUS "Configure package without VTK!")
endif()



# PCL
find_package(PCL REQUIRED)
if(PCL_FOUND)
    include_directories(${PCL_INCLUDE_DIRS})
    link_directories(${PCL_LIBRARIES_DIR})
    set(HAVE_PCL True)
    message(STATUS "Configure package with PCL!")
else()
    set(HAVE_PCL False)
    message(STATUS "Configure package without PCL!")
endif()


set(EIGEN3_DIR "/usr/local")
message(STATUS ${EIGEN3_DIR})

find_package(Eigen3 REQUIRED)
if(EIGEN3_FOUND)
    include_directories(${EIGEN3_DIR}/include/eigen3)
    include_directories(${EIGEN3_INCLUDE_DIRS})
    link_directories(${EIGEN3_DIR}/lib)
    message(STATUS "Configure package with EIGEN3!")
    set(HAVE_EIGEN3 True)
else()
    set(HAVE_EIGEN3 False)
    message(STATUS "Configure package without EIGEN3!")
endif()

set(MPI_DIR "/usr/local")
message(STATUS ${MPI_DIR})

find_package(MPI REQUIRED)
if(MPI_CXX_FOUND)
    include_directories(${MPI_CXX_INCLUDE_PATH})
    link_directories(${MPI_CXX_LINK_FLAG})
    set(HAVE_MPI_CXX True)
    message(STATUS "Configure package with mpi cxx!")
else()
    set(HAVE_MPI_CXX False)
    message(STATUS "Configure package without mpi cxx!")
endif()

if(MPI_C_FOUND)
    include_directories(${MPI_C_INCLUDE_PATH})
    link_directories(${MPI_C_LINK_FLAG})
    set(HAVE_MPI_C True)
    message(STATUS "Configure package with mpi c!")
else()
    set(HAVE_MPI_C False)
    message(STATUS "Configure package without mpi c!")
endif()

add_executable(CGAL_Test points_and_segment.cpp)
target_link_libraries(CGAL_Test PRIVATE   ${EIGEN3_LIBS}
                                                   ${OpenCV_LIBS}
                                                   ${PCL_LIBRARIES}
                                                   ${OPENGL_LIBRARIES}
                                                   ${VTK_LIBRARIES}
                                                   ${CGAL_LIBS})

这里不需要 QT 的界面工具,只需要 QT 左右编译器, 其中,该模块,包含了, EIGEN3_LIBSOpenCVPCLOPENGLVTKCGAL

CGAL Test 01 点和线段
#include <iostream>
#include <CGAL/Simple_cartesian.h>


typedef CGAL::Simple_cartesian<double> Kernel;
typedef Kernel::Point_2 Point_2;
typedef Kernel::Segment_2 Segment_2;

int main()
{
    Point_2 p(1,1), q(10,10);
    std::cout << "p = " << p << std::endl;
    std::cout << "q = " << q.x() << " " << q.y() << std::endl;
    std::cout << "sqdist(p,q) = "
            << CGAL::squared_distance(p,q) << std::endl;
    Segment_2 s(p,q);
    Point_2 m(5, 9);
    std::cout << "s = " << s << std::endl;
    std::cout << "m = " << m << std::endl;
    std::cout << "sqdist(Segment_2(p,q), m) = "
            << CGAL::squared_distance(s,m) << std::endl;
    std::cout << "p, q, and m ";
    switch (CGAL::orientation(p,q,m))
    {
        case CGAL::COLLINEAR:
            std::cout << "are collinear\n";
            break;
        case CGAL::LEFT_TURN:
            std::cout << "make a left turn\n";
            break;
        case CGAL::RIGHT_TURN:
            std::cout << "make a right turn\n";
            break;
    }
    std::cout << " midpoint(p,q) = " << CGAL::midpoint(p,q) << std::endl;
    return 0;
}


结果输出

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值