Go to file
2025-02-03 11:46:18 +08:00
archived initial upload 2024-09-10 16:01:52 +08:00
doc update readme 2025-02-03 11:46:18 +08:00
src tmp 2025-01-16 20:08:46 +08:00
.gitignore initial upload 2024-09-10 16:01:52 +08:00
CMakeLists.txt initial upload 2024-09-10 16:01:52 +08:00
config.sh initial upload 2024-09-10 16:01:52 +08:00
LICENSE initial upload 2024-09-10 16:01:52 +08:00
README.md update readme 2025-02-03 11:46:18 +08:00

Spherical Triangular Tessellation (STT) Generator

Introduction

The spherical triangular tessellation (STT) is a method to partition a spherical surface into triangular cells. This program generates STT based on an icosahedron and provides various refinement options:

  1. Geometric refinement around:
    • Points
    • Lines
    • Polygons
    • Circles
  2. Topographic refinement based on elevation data
  3. Customizable exterior and interior boundaries

Technical Details

Core Algorithm

  1. Base Structure

    • Starts with an icosahedron (20 triangular faces)
    • Uses quad-tree data structure for adaptive refinement
    • Each face of the icosahedron becomes the root of a quad-tree
  2. Refinement Process

    • Adaptive refinement based on various constraints
    • Uses vector calculations for spherical geometry
    • Supports multiple levels of refinement (controlled by depth parameter)
  3. Constraint Types

    • Point constraints: Refines mesh around specific points
    • Line constraints: Refines along great circle paths
    • Polygon constraints: Refines within or around polygon boundaries
    • Circle constraints: Refines within spherical caps
    • Topographic constraints: Refines based on elevation data
  4. Coordinate Systems

    • Supports multiple reference systems:
      • WGS84 ellipsoid
      • Spherical Earth
      • Lunar sphere
      • Custom ellipsoid
      • Custom flattened sphere
    • Configurable orientation of the base icosahedron

Algorithm Details

  1. Initialization

    • Creates base icosahedron
    • Sets up coordinate system and orientation
    • Initializes quad-tree structure
  2. Refinement Process

    • Reads constraint files
    • For each triangle:
      • Tests intersection with constraints
      • Subdivides if needed based on depth and resolution
      • Maintains neighbor relationships
  3. Output Generation

    • Generates final mesh
    • Computes vertex locations
    • Creates neighbor lists
    • Exports in various formats
  4. Memory Management

    • Uses dynamic allocation for tree structures
    • Automatically cleans up temporary data
    • Efficient handling of large datasets

Files and folders

  1. CMakeLists.txt: CMake project configuration file
  2. src/: Source code directory containing all implementation files
  3. doc/: Example files and test cases
  4. README.md: Documentation (this file)
  5. archived/: Legacy source files (for reference only)

Installation

To compile and install using CMake:

mkdir build
cd build
cmake ..
make
make install

Usage

Usage: stt -d<minimal-depth>/<maximal-depth> [options]

Required:
  -d<min>/<max>    Minimal and maximal depths of the quad-tree structure
                   Example: -d3/7 for refinement from depth 3 to 7

Optional:
  -r<ref>          Coordinate reference system:
                   - 'WGS84': WGS84 ellipsoid
                   - 'Earth': Spherical Earth
                   - 'Moon': Lunar sphere
                   - <eq-rad>/<pole-rad>: Custom ellipsoid
                   - <eq-rad>,<flat-rate>: Custom flattened sphere
  -o<lon>/<lat>    Orientation of icosahedron top vertex
                   Default: 0/90 (North Pole)
  
Output options:
  -m<file>         Output Gmsh(.msh) mesh file
  -v<file>         Output vertices' locations
  -t<file>         Output triangle centers
  -n<file>         Output triangle neighbors

Refinement control:
  -p<file>         Control points file
  -l<file>         Control lines file
  -g<file>         Control polygons file
  -c<file>         Control circles file
  -t<file>         Topography control file
  -s<file>         Outline shape file
  -k<file>         Hole shape file
  -z<file>         Topography data file
  
Help:
  -h               Show this help message

Input File Formats

Point Control Format

Controls refinement around specific points. Each point is defined by its location and refinement parameters:

# <longitude> <latitude> <maximal-depth> <minimal-resolution> <physical-group>
# longitude, latitude: Coordinates in degrees
# maximal-depth: Maximum refinement depth for this point
# minimal-resolution: Minimum cell size in degrees
# physical-group: Group identifier for the refined region
-45 -45 5 1.0 7
45 -45 5 1.0 7

Circle Control Format

Controls refinement around spherical caps. Each circle is defined by its center, radius, and refinement parameters:

# <longitude> <latitude> <spherical-cap-degree> <maximal-depth> <minimal-resolution> <physical-group>
# spherical-cap-degree: Angular radius of the cap in degrees
45 60 30 5 0.1 12
-20 -45 20 6 0.1 13

Line/Polygon Control Format

Controls refinement along lines or around polygons. Each shape is defined by a sequence of points and refinement parameters:

# First line: <number-of-points> <maximal-depth> <minimal-resolution> <physical-group>
# Following lines: <longitude> <latitude> of each point
# Points are connected in sequence, last point connects to first for polygons
4 6 0.1 5
-10 10
50 15
60 55
-15 50

Topography Control Format

Controls refinement based on elevation data. The refinement is based on elevation variation within triangles:

# First line: <maximum-STD> <maximal-depth> <minimal-resolution> <physical-group>
# Following lines: <longitude> <latitude> <elevation(meters)>
# maximum-STD: Maximum allowed standard deviation of elevation within a triangle
200.0 10 -1 5
-179.95 89.95 -4203.20
-179.85 89.95 -4203.07
-179.75 89.95 -4203.47

Note: maximum-STD represents the maximum standard deviation of elevation allowed in a triangle. A triangle will be refined if the elevation variation within it exceeds this threshold.

Examples

  1. Multi-resolution STT with geometric constraints:
# Creates a mesh with depth range 3-7, refined around lines, polygons and circles
stt -d 3/7 -m example.msh -l doc/control_lines.txt -g doc/control_poly.txt -c doc/control_circle.txt

stt-example

  1. Topography-constrained STT:
# Creates a mesh with depth range 6-10, refined based on topography data
stt -d 6/10 -m topo_example.msh -t doc/control_topo.txt

topo-example

Contact

For any bug reports or you need some help. Please contact Dr. Yi Zhang (yizhang-geo@zju.edu.cn).