2D curve functions. More...
Static Public Member Functions | |
static Point2Dd[] | Resample (Point2Dd[] curve, int resampledCurveLength) |
Resamples a 2-dimensional curve via linear interpolation assuming that the "speed" of the time mapping is constant. More... | |
static Point2Dd[] | IntersectWithLine (Point2Dd[] curve, Line line) |
Intersects a 2D curve with a line. More... | |
static Alignment2DResult | Align (Point2Dd[] curve, Point2Dd[] curveToBeAligned, AlignmentSettings config) |
Aligns two 2D curves via an iterative closest point method considering consensus correspondence for better shape alignment. More... | |
static Point2Dd[] | Merge (Point2Dd[] curve1, Point2Dd[] curve2, StartSelection startSelection) |
Merges two curves into one curve with interpolation. Takes two curves and merges them into one combined curve. If they overlap, an interpolation method is used to find a suitable approximation. This interpolation is done when switching between the two curves while the points are interleaved. The order in which the points are interleaved is defined by the closest neighbour for each point from curve2 to curve1 . More... | |
2D curve functions.
|
static |
Aligns two 2D curves via an iterative closest point method considering consensus correspondence for better shape alignment.
The method used here is a version of the ICP (closest iterative point) method. It uses a consensus metric to find the correspondence between points to stabilize the iterations needed in the alignment method. It supports only rigid transformations for the alignment. If not enough points within a given consens are found a classical ICP step is perfomed by finding corresponences soley based on nearest neighbours without any feasibility check.
curve | Reference curve. |
curveToBeAligned | Curve to be aligned to curve . |
config | Configuration of alignment. |
ArgumentNullException | When curve or curveToBeAligned is null. |
ArgumentException | When curve or curveToBeAligned is empty. |
CvbException | When an error during alignment occurs. |
Intersects a 2D curve with a line.
The line is defined by the hessian normal form: normal * x = d, with normal = 1 and d > 0.
The points have to be ordered by ascending x coordinates.
curve | Curve to be intersected. |
line | Line to interesect with. |
ArgumentNullException | When curve is null. |
ArgumentException | When curve is empty. |
CvbException | When an error during intersecting occurs. |
|
static |
Merges two curves into one curve with interpolation. Takes two curves and merges them into one combined curve. If they overlap, an interpolation method is used to find a suitable approximation. This interpolation is done when switching between the two curves while the points are interleaved. The order in which the points are interleaved is defined by the closest neighbour for each point from curve2 to curve1 .
This method works with curves in 2D.
If startSelection is set to StartSelection.Best, then the pair of curves curve1 and curve2 are sorted from left to right. This means, the algorithm checks which starting point from the two staring points is the best starting point for the merged curve. To make this decision the distance from each possible starting point to the other given curve is calculated and the point with the highest distance is taken as the overall starting point for the new generated merged curve. This method does work well for regular curves (not self intercepting curves). It can be switched off to save computation time if the caller is sure about the correct order.
The points on the curve are evaluated in the order in which they are listed. We assume a ordered pointset (not ordered by axis, but ordered according to the curve).
curve1 | First curve to merge. |
curve2 | Second curve to merge. |
startSelection | Which start point to use for the new curve. |
ArgumentNullException | When curve1 or curve2 is null. |
ArgumentException | When curve1 or curve2 do not contain points. |
CvbException | When an error during merging occurs. |
Resamples a 2-dimensional curve via linear interpolation assuming that the "speed" of the time mapping is constant.
The points have to be ordered by ascending x coordinates.
curve | Curve to be resampled. |
resampledCurveLength | Length of the resulting curve. |
ArgumentNullException | When curve is null. |
ArgumentException | When curve is empty. |
ArgumentOutOfRangeException | When resampledCurveLength is > 1. |
CvbException | When an error during resampling occurs. |