ImageScience 3.0.0

imagescience.shape
Class Spline

java.lang.Object
  extended by imagescience.shape.Spline
All Implemented Interfaces:
Shape

public class Spline
extends java.lang.Object
implements Shape

A closed, interpolating, C²-continuous, cubic spline curve in the x-y plane. It uses a uniform parametrization and knot vector. Although this may not be optimal in some cases, as pointed out by L. Piegl and W. Tiller, The NURBS Book, 2nd Edition, Springer-Verlag, Berlin, 1997, it allows for an extremely efficient implementation and computation of several features. Thus the user should be aware that this class works best for (approximately) equally spaced vertices. Also, although higher-dimensional vertices are accepted, only the x- and y-coordinates of the vertices are actually considered by all methods.


Constructor Summary
Spline()
          Default constructor.
Spline(Spline spline)
          Copy constructor.
Spline(java.util.Vector<Point> vertices)
          Constructs a spline from the given vertices.
 
Method Summary
 double area()
          Returns the area spanned by the spline.
 Image bitmap(boolean binary)
          Computes a bitmapped version of the shape.
 Bounds bounds()
          Computes the bounding box of the shape.
 boolean contains(double x, double y)
          Indicates the position of a point relative to the spline.
 boolean contains(Point point)
          Indicates the position of a point relative to the spline.
 java.awt.geom.GeneralPath contour()
          Returns the contour of the spline.
 Shape duplicate()
          Duplicates the shape.
 boolean empty()
          Indicates whether the shape is empty.
 boolean equals(Shape shape)
          Indicates whether this object has the same shape as the given object.
 double perimeter()
          Returns the perimeter of the spline.
 void set(java.util.Vector<Point> vertices)
          Sets the vertices of the spline to the given vertices.
 void translate(double dx, double dy)
          Translates the spline over the given distance.
 void update()
          Makes the spline recompute its shape from its vertices.
 java.util.Vector<Point> vertices()
          Returns a new Vector object containing the handles of the vertices of the spline.
 void vertices(java.util.Vector<Point> vertices)
          Sets the vertices of the spline to the given vertices.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Spline

public Spline()
Default constructor. Results in a spline with no vertices.


Spline

public Spline(java.util.Vector<Point> vertices)
Constructs a spline from the given vertices.

Parameters:
vertices - The vertices that define the spline. The handles of the Point objects are copied. Any subsequent modifications of the vertices become effective only after calling the update() method.
Throws:
java.lang.NullPointerException - If vertices or any of its elements is null.

Spline

public Spline(Spline spline)
Copy constructor.

Parameters:
spline - The spline to be copied. All information is copied and no memory is shared with this spline.
Throws:
java.lang.NullPointerException - If spline is null.
Method Detail

set

public void set(java.util.Vector<Point> vertices)
Sets the vertices of the spline to the given vertices.

Parameters:
vertices - The vertices to be copied. The handles of the Point objects are copied. Any subsequent modifications of the vertices become effective only after calling the update() method.
Throws:
java.lang.NullPointerException - If vertices or any of its elements is null.

vertices

public void vertices(java.util.Vector<Point> vertices)
Sets the vertices of the spline to the given vertices. Alias of method set(Vector).

Parameters:
vertices - The vertices to be copied. The handles of the Point objects are copied. Any subsequent modifications of the vertices become effective only after calling the update() method.
Throws:
java.lang.NullPointerException - If vertices or any of its elements is null.

vertices

public java.util.Vector<Point> vertices()
Returns a new Vector object containing the handles of the vertices of the spline.

Returns:
A new Vector object containing the handles of the vertices of the spline. Any subsequent modifications of the vertices become effective only after calling the update() method.

duplicate

public Shape duplicate()
Description copied from interface: Shape
Duplicates the shape.

Specified by:
duplicate in interface Shape
Returns:
A new Shape object that is an exact copy of this object. All information is copied and no memory is shared between this and the returned object.

translate

public void translate(double dx,
                      double dy)
Translates the spline over the given distance. This is done by translating all the vertices over the given distance and updating the spline accordingly.

Parameters:
dx - The distance in the x-dimension over which to translate.
dy - The distance in the y-dimension over which to translate.

perimeter

public double perimeter()
Returns the perimeter of the spline.

Returns:
The perimeter of the spline. The perimeter is approximated using the rapidly converging estimator described by J. Gravesen, "Adaptive Subdivision and the Length and Energy of Bézier Curves", Computational Geometry, vol. 8, no. 1, June 1997, pp. 13-31. The absolute difference between the true perimeter and the approximation returned by this method is guaranteed to be (much) less than 0.001.

area

public double area()
Returns the area spanned by the spline.

Returns:
The area spanned by the spline. The area is computed using the exact (up to numerical rounding errors) method described by M. Jacob, T. Blu, M. Unser, "An Exact Method for Computing the Area Moments of Wavelet and Spline Curves", IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 23, no. 6, June 2001, pp. 633-642. The result is correct only for non-self-intersecting splines.

contains

public boolean contains(Point point)
Indicates the position of a point relative to the spline.

Specified by:
contains in interface Shape
Parameters:
point - The point whose position relative to the spline is to be tested. The point is treated as a 2D point. That is, only its x- and y-coordinate values are considered.
Returns:
The value contains(point.x,point.y).
Throws:
java.lang.NullPointerException - If point is null.

contains

public boolean contains(double x,
                        double y)
Indicates the position of a point relative to the spline.

Parameters:
x - The x-coordinate of the point.
y - The y-coordinate of the point.
Returns:
Value true if the point is on or inside the spline, or false if it is outside the spline.

contour

public java.awt.geom.GeneralPath contour()
Returns the contour of the spline.

Returns:
A new GeneralPath object containing the contour of the spline. The interior of the returned path is defined by the non-zero winding rule.

bitmap

public Image bitmap(boolean binary)
Description copied from interface: Shape
Computes a bitmapped version of the shape.

Specified by:
bitmap in interface Shape
Parameters:
binary - Determines whether the returned bitmap image is two-valued. If true, image elements whose center positions fall inside the shape are set to 255, and elements whose center positions fall outside the shape are set to 0. If false, additional processing is performed, by which each image element falling partly inside and partly outside the shape is set to 255 times its (approximate) inside-fraction.
Returns:
A new ByteImage object containing a bitmapped version of the shape. The origin of the integer coordinate system of the image corresponds to the position in the shape coordinate system obtained by taking the floor value of the lower bound of the shape in each dimension.

bounds

public Bounds bounds()
Description copied from interface: Shape
Computes the bounding box of the shape.

Specified by:
bounds in interface Shape
Returns:
A new Bounds object containing the bounding box of the shape.

equals

public boolean equals(Shape shape)
Description copied from interface: Shape
Indicates whether this object has the same shape as the given object.

Specified by:
equals in interface Shape
Parameters:
shape - The shape to compare this shape with.
Returns:
Value true if shape is not null, and an instance of the same class as this object, with the exact same shape, or false if this is not the case.

empty

public boolean empty()
Description copied from interface: Shape
Indicates whether the shape is empty.

Specified by:
empty in interface Shape
Returns:
Value true if the shape does not enclose any space, or false if it does.

update

public void update()
Makes the spline recompute its shape from its vertices.


ImageScience 3.0.0

Copyright (C) Erik Meijering. Permission to use this software and corresponding documentation for educational, research, and not-for-profit purposes, without a fee and without a signed licensing agreement, is granted, subject to the following terms and conditions.

IT IS NOT ALLOWED TO REDISTRIBUTE, SELL, OR LEASE THIS SOFTWARE, OR DERIVATIVE WORKS THEREOF, WITHOUT PERMISSION IN WRITING FROM THE COPYRIGHT HOLDER. THE COPYRIGHT HOLDER IS FREE TO MAKE VERSIONS OF THE SOFTWARE AVAILABLE FOR A FEE OR COMMERCIALLY ONLY.

IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OF ANY KIND WHATSOEVER, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.

THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE EXPRESS OR IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE AND CORRESPONDING DOCUMENTATION IS PROVIDED "AS IS". THE COPYRIGHT HOLDER HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.