GraphicsGems.c
2d and 3d Vector C Library
by Andrew Glassner
from "Graphics Gems", Academic Press, 1990
-
Method Summary
Modifier and TypeMethodDescriptionstatic @NonNull IntArrayListfindCorners(@NonNull List<javafx.geometry.Point2D> digitizedPoints, double minAngle, double minDistance) Finds corners in the provided point list, and returns their indices.static voidfitBezierPath(@NonNull PathBuilder<?> builder, @NonNull List<javafx.geometry.Point2D> digitizedPoints, double error) Fits a bezier path to the specified list of digitized points.static voidfitBezierPath(@NonNull PathBuilder<?> builder, javafx.geometry.Point2D[] digitizedPoints, double error) Fits a bezier path to the specified list of digitized points.static voidfitBezierPath(@NonNull PathBuilder<?> builder, @NonNull BezierPath digitizedPoints, double error) Fits a bezier path to the specified list of digitized points.static voidreduceNoise(@NonNull List<javafx.geometry.Point2D> digitizedPoints, double weight) Reduces noise from the digitized points, by applying an approximation of a gaussian filter to the data.removeClosePoints(@NonNull List<javafx.geometry.Point2D> digitizedPoints, double minDistance) Removes points which are closer together than the specified minimal distance.splitAtCorners(@NonNull List<javafx.geometry.Point2D> digitizedPoints, double maxAngle, double minDistance) Splits the digitized points into multiple segments at each corner point.
-
Method Details
-
main
-
fitBezierPath
public static void fitBezierPath(@NonNull PathBuilder<?> builder, javafx.geometry.Point2D[] digitizedPoints, double error) Fits a bezier path to the specified list of digitized points.This is a convenience method for calling
fitBezierPath(org.jhotdraw8.geom.PathBuilder<?>, javafx.geometry.Point2D[], double)- Parameters:
builder- the builder for the bezier pathdigitizedPoints- digited points.error- the maximal allowed error between the bezier path and the digitized points.
-
fitBezierPath
public static void fitBezierPath(@NonNull PathBuilder<?> builder, @NonNull List<javafx.geometry.Point2D> digitizedPoints, double error) Fits a bezier path to the specified list of digitized points.- Parameters:
builder- the builder for the bezier pathdigitizedPoints- digited points.error- the maximal allowed error between the bezier path and the digitized points.
-
fitBezierPath
public static void fitBezierPath(@NonNull PathBuilder<?> builder, @NonNull BezierPath digitizedPoints, double error) Fits a bezier path to the specified list of digitized points.This is a convenience method for calling
fitBezierPath(org.jhotdraw8.geom.PathBuilder<?>, javafx.geometry.Point2D[], double).- Parameters:
builder- the builder for the bezier pathdigitizedPoints- digited points.error- the maximal allowed error between the bezier path and the digitized points.
-
removeClosePoints
public static @NonNull ArrayList<javafx.geometry.Point2D> removeClosePoints(@NonNull List<javafx.geometry.Point2D> digitizedPoints, double minDistance) Removes points which are closer together than the specified minimal distance.The minimal distance should be chosen dependent on the size and resolution of the display device, and on the sampling rate. A good value for mouse input on a display with 100% Zoom factor is 2.
The purpose of this method, is to remove points, which add no additional information about the shape of the curve from the list of digitized points.
The cleaned up set of digitized points gives better results, when used as input for method
splitAtCorners(java.util.List<javafx.geometry.Point2D>, double, double).- Parameters:
digitizedPoints- Digitized pointsminDistance- minimal distance between two points. If minDistance is 0, this method only removes sequences of coincident points.- Returns:
- Digitized points with a minimal distance.
-
splitAtCorners
public static @NonNull ArrayList<ArrayList<javafx.geometry.Point2D>> splitAtCorners(@NonNull List<javafx.geometry.Point2D> digitizedPoints, double maxAngle, double minDistance) Splits the digitized points into multiple segments at each corner point.Corner points are both contained as the last point of a segment and the first point of a subsequent segment.
- Parameters:
digitizedPoints- Digitized pointsmaxAngle- maximal angle in radians between the current point and its predecessor and successor up to which the point does not break the digitized list into segments. Recommended value 44° = 44 * 180d / Math.PIminDistance- the minimal distance- Returns:
- Segments of digitized points, each segment having less than maximal angle between points.
-
findCorners
public static @NonNull IntArrayList findCorners(@NonNull List<javafx.geometry.Point2D> digitizedPoints, double minAngle, double minDistance) Finds corners in the provided point list, and returns their indices.- Parameters:
digitizedPoints- List of digitized points.minAngle- Minimal angle for corner pointsminDistance- Minimal distance between a point and adjacent points for corner detection- Returns:
- list of corner indices.
-
reduceNoise
public static @NonNull ArrayList<javafx.geometry.Point2D> reduceNoise(@NonNull List<javafx.geometry.Point2D> digitizedPoints, double weight) Reduces noise from the digitized points, by applying an approximation of a gaussian filter to the data.The filter does the following for each point P, with weight 0.5:
x[i] = 0.5*x[i] + 0.25*x[i-1] + 0.25*x[i+1]; y[i] = 0.5*y[i] + 0.25*y[i-1] + 0.25*y[i+1];
- Parameters:
digitizedPoints- Digitized pointsweight- Weight of the current point- Returns:
- Digitized points with reduced noise.
-