1 /* File ContinuousCurve2D.java
2 *
3 * Project : Java Geometry Library
4 *
5 * ===========================================
6 *
7 * This library is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation, either version 2.1 of the License, or (at
10 * your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
14 * or FITNESS FOR A PARTICULAR PURPOSE.
15 *
16 * See the GNU Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this library. if not, write to :
20 * The Free Software Foundation, Inc., 59 Temple Place, Suite 330,
21 * Boston, MA 02111-1307, USA.
22 */
23
24 // package
25
26 package math.geom2d.curve;
27
28 // Imports
29 import java.util.*;
30
31 import math.geom2d.AffineTransform2D;
32 import math.geom2d.Box2D;
33 import math.geom2d.Vector2D;
34 import math.geom2d.polygon.Polyline2D;
35
36 /**
37 * Interface for all curves which can be drawn with one stroke. This includes
38 * closed curves (ellipses, polygon boundaries...), infinite curves (straight
39 * lines, parabolas, ...), and 'finite' curves, such as polylines, conic arcs,
40 * line segments, splines... Note that an hyperbola is compound of 2 continuous
41 * curves.
42 * <p>
43 * Such curves accept parametric representation, in the form :
44 * <code>p(t)={x(t),y(t)}</code>, with <code>t</code> contained in
45 * appropriate domain. Bounds of domain of definition can be obtained by methods
46 * <code>getT0()</code> and <code>getT1()</code>.
47 * <p>
48 */
49
50 public interface ContinuousCurve2D extends Curve2D {
51
52 // ===================================================================
53 // general methods
54
55 /**
56 * Return true if the curve makes a loop, that is come back to starting
57 * point after covering the path.
58 */
59 public abstract boolean isClosed();
60
61 public Vector2D getLeftTangent(double t);
62 public Vector2D getRightTangent(double t);
63
64 /**
65 * Returns a set of smooth curves.
66 */
67 public abstract Collection<? extends SmoothCurve2D> getSmoothPieces();
68
69 /**
70 * Returns an approximation of the curve as a polyline with <code>n</code>
71 * line segments. If the curve is closed, the method should return an
72 * instance of Ring2D.
73 *
74 * @param n the number of line segments
75 * @return a polyline with <code>n</code> line segments.
76 */
77 public abstract Polyline2D getAsPolyline(int n);
78
79 /**
80 * Append the path of the curve to the given path.
81 *
82 * @param path a path to modify
83 * @return the modified path
84 */
85 public abstract java.awt.geom.GeneralPath appendPath(
86 java.awt.geom.GeneralPath path);
87
88 public abstract Curve2D getReverseCurve();
89
90 public abstract Curve2D getSubCurve(double t0, double t1);
91
92 public abstract CurveSet2D clip(Box2D box);
93
94 public abstract Curve2D transform(AffineTransform2D trans);
95 }