1 /* file : OrientedCurve2D.java
2 *
3 * Project : geometry
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 * Created on 25 dec. 2006
24 *
25 */
26
27 package math.geom2d.domain;
28
29 import math.geom2d.AffineTransform2D;
30 import math.geom2d.Box2D;
31 import math.geom2d.curve.Curve2D;
32 import math.geom2d.curve.CurveSet2D;
33
34 /**
35 * An OrientedCurve2D defines an 'inside' and an 'outside'. It is typically a
36 * part of the boundary of a domain. Several OrientedCurve2D form a
37 * ContinuousBoundary2D, and one or several ContinousBoundary2D form a
38 * Boundary2D.
39 *
40 * @author dlegland
41 */
42 public interface OrientedCurve2D extends Curve2D {
43
44 /**
45 * Return the angle portion that the curve turn around the given point.
46 * Result is a signed angle.
47 *
48 * @param point a point of the plane
49 * @return a signed angle
50 */
51 public abstract double getWindingAngle(java.awt.geom.Point2D point);
52
53 /**
54 * Get the signed distance of the curve to the given point: this distance is
55 * positive if the point lies outside the shape, and is negative if the
56 * point lies inside the shape. In this case, absolute value of distance is
57 * equals to the distance to the border of the shape.
58 *
59 * @param point a point of the plane
60 * @return the signed distance to the curve
61 */
62 public abstract double getSignedDistance(java.awt.geom.Point2D point);
63
64 /**
65 * The same as getSignedDistance(Point2D), but by passing 2 double as
66 * arguments.
67 *
68 * @param x x-coord of a point
69 * @param y y-coord of a point
70 * @return the signed distance of the point (x,y) to the curve
71 */
72 public abstract double getSignedDistance(double x, double y);
73
74 /**
75 * Returns true if the point is 'inside' the domain bounded by the curve.
76 *
77 * @param pt a point in the plane
78 * @return true if the point is on the left side of the curve.
79 */
80 // TODO: think about either deprecate or better define
81 public abstract boolean isInside(java.awt.geom.Point2D pt);
82
83 public abstract Curve2D getReverseCurve();
84
85 // TODO: what to do with non-continuous oriented curves ?
86 // public abstract OrientedCurve2D getSubCurve(double t0, double t1);
87
88 public abstract CurveSet2D clip(Box2D box);
89
90 public abstract Curve2D transform(AffineTransform2D trans);
91 }