Correa 1
C++ library with Python bindings to analyse the shape of simple closed curves in R^2
Loading...
Searching...
No Matches
Comp2DShapesFocal.cpp File Reference

compare polygons with specific focal points More...

Functions

Vector2D parse_focal_point (const std::string &focal_input, bool verbose=false)
 Parse focal point from either a file path or inline coordinates.
 
int main (int argc, char **argv)
 Main function for comparing 2D shapes with specified focal points.
 
bool parse_args (int argc, char **argv, std::string *file1, std::string *focal1, std::string *file2, std::string *focal2, int *disttype, double *microns_per_pixel1, double *microns_per_pixel2, bool *verbose)
 Parse command-line arguments for Comp2DShapesFocal.
 

Detailed Description

compare polygons with specific focal points

Author
Patrice Koehl
Yossi Bokor Bleile
Date
December 2025
Version
1.1

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Main function for comparing 2D shapes with specified focal points.

This program compares two 2D polygons using various distance metrics, with user-specified focal points for each polygon. The polygons are shifted so that their focal points are at the origin before comparison, allowing for focal-point-relative shape analysis.

The program supports multiple distance metrics:

  • Fréchet distance: Measures curve similarity (minimum leash length)
  • Ellipse-based: Compares fitted ellipse properties (inscribed, inscribing, least-squares)
  • Curvature-based: Willmore energy and Wasserstein distance on curvature distributions
  • Persistence diagrams: Topological comparison using persistent homology
Parameters
argcNumber of command-line arguments
argvArray of command-line argument strings
Returns
0 on success, 1 on failure
See also
parse_args() for command-line argument details
parse_focal_point() for focal point specification format

◆ parse_args()

bool parse_args ( int argc,
char ** argv,
std::string * file1,
std::string * focal1,
std::string * file2,
std::string * focal2,
int * disttype,
double * microns_per_pixel1,
double * microns_per_pixel2,
bool * verbose )

Parse command-line arguments for Comp2DShapesFocal.

Parses command-line arguments for the Comp2DShapesFocal program, extracting input files, focal points, distance type, microns per pixel settings, and verbose flag.

Parameters
argcArgument count from main()
argvArgument vector from main()
[out]file1Path to first input polygon file (set by -i1 flag)
[out]focal1Focal point for first polygon - file path or "x,y" format (set by -f1 flag)
[out]file2Path to second input polygon file (set by -i2 flag)
[out]focal2Focal point for second polygon - file path or "x,y" format (set by -f2 flag)
[out]disttypeDistance type flag (set by -d flag):
  • 0: Fréchet distance - measures similarity between curves, representing the minimum leash length needed for a person walking a dog along each curve
  • 1: Ellipse-based distances - compares aspect ratios of inscribed, inscribing, and least-squares fitted ellipses
  • 2: Curvature-based distances - includes Willmore energy (bending energy) and Wasserstein distance between curvature distributions
  • 3: 2-Wasserstein distance between persistence diagrams - topological shape descriptor based on persistent homology
  • 4: All distances - computes all of the above metrics
[out]microns_per_pixel1Microns per pixel conversion for polygon 1 (set by -mpp1 or -mpp flag, default: 1.0)
[out]microns_per_pixel2Microns per pixel conversion for polygon 2 (set by -mpp2 or -mpp flag, default: 1.0)
[out]verboseEnable verbose output (set by -v or –verbose flag, default: false)
Returns
true if arguments were parsed successfully, false otherwise

◆ parse_focal_point()

Vector2D parse_focal_point ( const std::string & focal_input,
bool verbose = false )

Parse focal point from either a file path or inline coordinates.

This function accepts either a file path containing focal point coordinates or a string with inline coordinates in the format "x,y". If a valid file exists at the path, it reads the coordinates from the file. Otherwise, it parses the string as inline coordinates.

Parameters
focal_inputString containing either a file path or inline coordinates (e.g., "698.678,816.662")
verboseIf true, prints debug information during parsing (default: false)
Returns
Vector2D containing the parsed focal point coordinates
Exceptions
std::exit(1)if the focal point cannot be parsed or has fewer than 2 coordinates