Earcut.js의 C ++ 포트, 빠른 헤더 전용 다각형 삼각 분해 라이브러리.
이 라이브러리는 Z-Order Curve Hashing에 의해 최적화되고 구멍, 꼬인 다각형, 퇴행성 및 자기 간립을 처리하도록 확장 된 수정 된 이어 슬라이싱 알고리즘을 구현하고 삼각 측량의 정확성을 보장 하지 않지만 지리적 형태와 같은 실제 데이터에 항상 수용 가능한 결과를 생성하려는 시도.
그것은 주먹의 아이디어를 기반으로합니다 : Martin Held의 다각형의 빠른 산업 강도 삼각 측량과 David Eberly의 귀 클리핑으로 삼각 측량.
# include < earcut.hpp > // The number type to use for tessellation
using Coord = double ;
// The index type. Defaults to uint32_t, but you can also pass uint16_t if you know that your
// data won't have more than 65536 vertices.
using N = uint32_t ;
// Create array
using Point = std::array<Coord, 2 >;
std::vector<std::vector< Point >> polygon;
// Fill polygon structure with actual data. Any winding order works.
// The first polyline defines the main polygon.
polygon.push_back({{ 100 , 0 }, { 100 , 100 }, { 0 , 100 }, { 0 , 0 }});
// Following polylines define holes.
polygon.push_back({{ 75 , 25 }, { 75 , 75 }, { 25 , 75 }, { 25 , 25 }});
// Run tessellation
// Returns array of indices that refer to the vertices of the input polygon.
// e.g: the index 6 would refer to {25, 75} in this example.
// Three subsequent indices form a triangle. Output triangles are clockwise.
std::vector<N> indices = mapbox::earcut<N>(polygon);이어 컷은 구멍을 포함한 모든 와인딩 순서의 단순한 평면 다각형을 삼각 할 수 있습니다. 심지어는 비소적인 포전을위한 강력하고 수용 가능한 솔루션을 반환 할 것입니다. 이어 컷은 2D 비행기에서 작동합니다. 세 가지 이상의 치수가있는 경우 삼각 측량 전에 2D 표면에 투사하거나 작업에 더 적합한 라이브러리를 사용할 수 있습니다 (예 : CGAL).
사용자 정의 포인트 유형을 입력으로 사용할 수도 있습니다. std::tuple , std::pair 및 std::array 에 대해 정의 된 기본 액세서가 있습니다. Clipper의 IntPoint 유형과 같은 사용자 정의 유형의 경우 다음을 수행하십시오.
// struct IntPoint {
// int64_t X, Y;
// };
namespace mapbox {
namespace util {
template <>
struct nth < 0 , IntPoint> {
inline static auto get ( const IntPoint &t) {
return t. X ;
};
};
template <>
struct nth < 1 , IntPoint> {
inline static auto get ( const IntPoint &t) {
return t. Y ;
};
};
} // namespace util
} // namespace mapbox 다각형에 맞춤 컨테이너 유형을 사용할 수도 있습니다. std :: 벡터와 유사하게 컨테이너, 특히 size() , empty() 및 operator[] 의 요구 사항을 충족해야합니다.
이어 컷 삼각 측량 라이브러리를 사용하려는 경우; 프로젝트에 헤더 파일 <earcut.hpp> 를 복사하고 포함시키고 섹션 사용에 문서화 된 단계를 따르십시오.
대신 테스트, 벤치 마크 및 시각화 프로그램을 구축하려면 다음을 수행하십시오.
계속하기 전에 다음 도구와 라이브러리를 설치하십시오.
참고 : Windows와 같은 일부 운영 체제에서는 경로 환경 변수에 CMAKE 및 GIT를 추가하기 위해 수동 단계가 필요합니다.
git clone --recursive https://github.com/mapbox/earcut.hpp.git
cd earcut.hpp
mkdir build
cd build
cmake ..
make
# ./tests
# ./bench
# ./vizgit clone --recursive https://github.com/mapbox/earcut.hpp.git
cd earcut.hpp
mkdir project
cd project
cmake .. -G " Visual Studio 14 2015 "
:: you can also generate projects for "Visual Studio 12 2013", "XCode", "Eclipse CDT4 - Unix Makefiles"완료 후 IDE와 함께 생성 된 프로젝트를 엽니 다.
https://github.com/mapbox/earcut.hpp.git에서 프로젝트를 가져 오면 좋을 것입니다!
이것은 현재 Earcut 2.2.4를 기반으로합니다.