1 /* File Conic2D.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.conic;
27
28 import math.geom2d.AffineTransform2D;
29 import math.geom2d.Box2D;
30 import math.geom2d.curve.CurveSet2D;
31 import math.geom2d.domain.Boundary2D;
32 import math.geom2d.domain.ContinuousOrientedCurve2D;
33
34 // Imports
35
36 /**
37 * Interface for all conic curves: parametric conics, or ellipses, parabolas,
38 * and hyperbolas. Degenerate conics are also encompassed by this interface.
39 */
40 public interface Conic2D extends Boundary2D {
41
42 // ===================================================================
43 // constants
44
45 /**
46 * The different types of conic.
47 */
48 public enum Type {
49 /**
50 * Degenerate conic, for example a conic given by the equation
51 * <code>x^2+1=0</code>)
52 */
53 NOT_A_CONIC,
54 /** Ellipse */
55 ELLIPSE,
56 /** Hyperbola */
57 HYPERBOLA,
58 /** Parabola */
59 PARABOLA,
60 /** Circle */
61 CIRCLE,
62 /** Straight Line */
63 STRAIGHT_LINE,
64 /** Union of two lines */
65 TWO_LINES,
66 /** Single point */
67 POINT;
68 }
69
70 // ===================================================================
71 // class variables
72
73 // ===================================================================
74 // constructors
75
76 // ===================================================================
77 // accessors
78
79 // type accessors ------------
80
81 public abstract Type getConicType();
82
83 /**
84 * Returns the coefficient of the Cartesian representation of the conic.
85 * Cartesian equation has the form :
86 * <p>
87 * a*x^2 + b*x*y + c*y^2 + d*x + e*y + f
88 * <p>
89 * The length of the array is then of size 6.
90 */
91 public abstract double[] getConicCoefficients();
92
93 /**
94 * Returns the eccentricity of the conic.
95 */
96 public abstract double getEccentricity();
97
98 // ===================================================================
99 // modifiers
100
101 public abstract Conic2D getReverseCurve();
102
103 public abstract Conic2D transform(AffineTransform2D trans);
104
105 public abstract CurveSet2D<? extends ContinuousOrientedCurve2D> clip(
106 Box2D box);
107 }