Code covered by the BSD License

# geom2d

### David Legland (view profile)

13 Jun 2005 (Updated )

Geometry library for matlab. Performs geometric computations on points, lines, circles, polygons...

Contents.m
```% GEOM2D Geometry 2D Toolbox
% Version 1.0 21-Mar-2011 .
%
% 	Library to handle and visualize geometric primitives such as points,
% 	lines, circles and ellipses, polygons...
%
%   The goal is to provide a low-level library for manipulating geometrical
%   primitives, making easier the development of more complex geometric
%   algorithms.
%
%   Most functions works for planar shapes, but some ones have been
%   extended to 3D or to any dimension.
%
% Points
%   points2d              - Description of functions operating on points
%   midPoint              - Middle point of two points or of an edge
%   circumCenter          - Circumcenter of three points
%   isCounterClockwise    - Compute relative orientation of 3 points
%   polarPoint            - Create a point from polar coordinates (rho + theta)
%   angle2Points          - Compute horizontal angle between 2 points
%   angle3Points          - Compute oriented angle made by 3 points
%   distancePoints        - Compute distance between two points
%   transformPoint        - Transform a point with an affine transform
%   drawPoint             - Draw the point on the axis.
%
% Point Sets
%   clipPoints            - Clip a set of points by a box
%   centroid              - Compute centroid (center of mass) of a set of points
%   boundingBox           - Bounding box of a set of points
%   angleSort             - Sort points in the plane according to their angle to origin
%   findClosestPoint      - Find index of closest point in an array
%   minDistancePoints     - Minimal distance between several points
%   mergeClosePoints      - Merge points that are closer than a given distance
%   hausdorffDistance     - Hausdorff distance between two point sets
%   nndist                - Nearest-neighbor distances of each point in a set
%
% Vectors
%   vectors2d             - Description of functions operating on plane vectors
%   createVector          - Create a vector from two points
%   vectorNorm            - Compute norm of a vector, or of a set of vectors
%   vectorAngle           - Angle of a vector, or between 2 vectors
%   normalizeVector       - Normalize a vector to have norm equal to 1
%   isPerpendicular       - Check orthogonality of two vectors
%   isParallel            - Check parallelism of two vectors
%   transformVector       - Transform a vector with an affine transform
%   rotateVector          - Rotate a vector by a given angle
%
% Straight lines
%   lines2d               - Description of functions operating on planar lines
%   createLine            - Create a straight line from 2 points, or from other inputs
%   medianLine            - Create a median line between two points
%   cartesianLine         - Create a straight line from cartesian equation coefficients
%   orthogonalLine        - Create a line orthogonal to another one through a point
%   parallelLine          - Create a line parallel to another one.
%   intersectLines        - Return all intersection points of N lines in 2D
%   lineAngle             - Computes angle between two straight lines
%   linePosition          - Position of a point on a line
%   lineFit               - Fit a straight line to a set of points
%   clipLine              - Clip a line with a box
%   reverseLine           - Return same line but with opposite orientation
%   transformLine         - Transform a line with an affine transform
%   drawLine              - Draw a straight line clipped by the current axis
%
% Edges (line segments between 2 points)
%   edges2d               - Description of functions operating on planar edges
%   createEdge            - Create an edge between two points, or from a line
%   edgeToLine            - Convert an edge to a straight line
%   edgeAngle             - Return angle of edge
%   edgeLength            - Return length of an edge
%   parallelEdge          - Edge parallel to another edge
%   centeredEdgeToEdge    - Convert a centered edge to a two-points edge
%   midPoint              - Middle point of two points or of an edge
%   edgePosition          - Return position of a point on an edge
%   clipEdge              - Clip an edge with a rectangular box
%   reverseEdge           - Intervert the source and target vertices of edge
%   intersectEdges        - Return all intersections between two set of edges
%   intersectLineEdge     - Return intersection between a line and an edge
%   transformEdge         - Transform an edge with an affine transform
%   edgeToPolyline        - Convert an edge to a polyline with a given number of segments
%   drawEdge              - Draw an edge given by 2 points
%   drawCenteredEdge      - Draw an edge centered on a point
%
% Rays
%   rays2d                - Description of functions operating on planar rays
%   createRay             - Create a ray (half-line), from various inputs
%   bisector              - Return the bisector of two lines, or 3 points
%   clipRay               - Clip a ray with a box
%   drawRay               - Draw a ray on the current axis
%
% Relations between points and lines
%   distancePointEdge     - Minimum distance between a point and an edge
%   distancePointLine     - Minimum distance between a point and a line
%   projPointOnLine       - Project of a point orthogonally onto a line
%   pointOnLine           - Create a point on a line at a given position on the line
%   isPointOnLine         - Test if a point belongs to a line
%   isPointOnEdge         - Test if a point belongs to an edge
%   isPointOnRay          - Test if a point belongs to a ray
%   isLeftOriented        - Test if a point is on the left side of a line
%
% Circles
%   circles2d             - Description of functions operating on circles
%   createCircle          - Create a circle from 2 or 3 points
%   createDirectedCircle  - Create a directed circle
%   intersectCircles      - Intersection points of two circles
%   intersectLineCircle   - Intersection point(s) of a line and a circle
%   circleToPolygon       - Convert a circle into a series of points
%   circleArcToPolyline   - Convert a circle arc into a series of points
%   isPointInCircle       - Test if a point is located inside a given circle
%   isPointOnCircle       - Test if a point is located on a given circle.
%   enclosingCircle       - Find the minimum circle enclosing a set of points.
%   circumCircle          - Circumscribed circle of three points
%   drawCircle            - Draw a circle on the current axis
%   drawCircleArc         - Draw a circle arc on the current axis
%
% Ellipses and Parabola
%   ellipses2d            - Description of functions operating on ellipses
%   inertiaEllipse        - Inertia ellipse of a set of points
%   isPointInEllipse      - Check if a point is located inside a given ellipse
%   ellipsePerimeter      - Perimeter of an ellipse
%   ellipseToPolygon      - Convert an ellipse into a series of points
%   drawEllipse           - Draw an ellipse on the current axis
%   drawEllipseArc        - Draw an ellipse arc on the current axis
%   drawParabola          - Draw a parabola on the current axis
%
% Geometric transforms
%   transforms2d          - Description of functions operating on transforms
%   createTranslation     - Create the 3*3 matrix of a translation
%   createRotation        - Create the 3*3 matrix of a rotation
%   createRotation90      - Matrix of a rotation for 90 degrees multiples
%   createScaling         - Create the 3*3 matrix of a scaling in 2 dimensions
%   createHomothecy       - Create the the 3x3 matrix of an homothetic transform
%   createBasisTransform  - Compute matrix for transforming a basis into another basis
%   createLineReflection  - Create the the 3x3 matrix of a line reflection
%   fitAffineTransform2d  - Fit an affine transform using two point sets
%   polynomialTransform2d - Apply a polynomial transform to a set of points
%   fitPolynomialTransform2d - Coefficients of polynomial transform between two point sets
%
% Angles
%   angles2d              - Description of functions for manipulating angles
%   normalizeAngle        - Normalize an angle value within a 2*PI interval
%   angleAbsDiff          - Absolute difference between two angles
%   angleDiff             - Difference between two angles
%
% Boxes
%   boxes2d               - Description of functions operating on bounding boxes
%   intersectBoxes        - Intersection of two bounding boxes
%   mergeBoxes            - Merge two boxes, by computing their greatest extent
%   randomPointInBox      - Generate random point within a box
%   boxToRect             - Convert box data to rectangle data
%   drawBox               - Draw a box defined by coordinate extents
%
% Triangles
%   isPointInTriangle     - Test if a point is located inside a triangle
%   triangleArea          - Signed area of a triangle
%
% Rectangles
%   rectToPolygon         - Convert a rectangle into a polygon (set of vertices)
%   rectToBox             - Convert rectangle data to box data
%   drawRect              - Draw rectangle on the current axis
%   orientedBox           - Minimum-width oriented bounding box of a set of points
%   orientedBoxToPolygon  - Convert an oriented box to a polygon (set of vertices)
%   drawOrientedBox       - Draw centered oriented rectangle
%
% Splines
%   cubicBezierToPolyline - Compute equivalent polyline from bezier curve control
%   drawBezierCurve       - Draw a cubic bezier curve defined by 4 control points
%
% Various drawing functions
%   drawVector            - Draw vector at a given position
%   drawArrow             - Draw an arrow on the current axis
%   drawLabels            - Draw labels at specified positions
%   drawShape             - Draw various types of shapes (circles, polygons...)
%   isAxisHandle          - Check if the input corresponds to a valid axis hanfle
%
% Other shapes
%   squareGrid            - Generate equally spaces points in plane.
%   hexagonalGrid         - Generate hexagonal grid of points in the plane.
%   triangleGrid          - Generate triangular grid of points in the plane.
%   crackPattern          - Create a (bounded) crack pattern tessellation
%   crackPattern2         - Create a (bounded) crack pattern tessellation
%
%
%   Credits:
%   * function 'enclosingCircle' rewritten from a file from Yazan Ahed
%       (yash78@gmail.com), available on Matlab File Exchange
%
% -----
% Author: David Legland
% e-mail: david.legland@grignon.inra.fr
% Created: 2005-11-07
% Copyright INRA - Cepia Software Platform.
% Project homepage: http://matgeom.sourceforge.net/
% http://www.pfl-cepia.inra.fr/index.php?page=geom2d

help('Contents');

%%   Deprecated functions

%   createMedian          - create a median line
%   minDistance           - compute minimum distance between a point and a set of points
%   homothecy             - create a homothecy as an affine transform
%   rotation              - return 3*3 matrix of a rotation
%   translation           - return 3*3 matrix of a translation
%   scaling               - return 3*3 matrix of a scaling in 2 dimensions
%   lineSymmetry          - create line symmetry as 2D affine transform
%   vecnorm               - compute norm of vector or of set of vectors
%   normalize             - normalize a vector
%   onCircle              - test if a point is located on a given circle.
%   inCircle              - test if a point is located inside a given circle.
%   onEdge                - test if a point belongs to an edge
%   onLine                - test if a point belongs to a line
%   onRay                 - test if a point belongs to a ray
%   invertLine            - return same line but with opposite orientation
%   clipLineRect          - clip a line with a polygon
%   formatAngle           - Ensure an angle value is comprised between 0 and 2*PI
%   drawRect2             - Draw centered rectangle on the current axis
%   circleAsPolygon       - Convert a circle into a series of points
%   circleArcAsCurve      - Convert a circle arc into a series of points
%   ellipseAsPolygon      - Convert an ellipse into a series of points

%% Others...

```