1 /** 2 * 3 */ 4 5 package math.geom3d.curve; 6 7 import java.util.Collection; 8 9 import math.geom3d.Point3D; 10 import math.geom3d.Shape3D; 11 import math.geom3d.curve.Curve3D; 12 import math.geom3d.transform.AffineTransform3D; 13 14 /** 15 * Interface for 3D space curve. Curve can be continuous, or a set of continuous 16 * curves. 17 * 18 * @author dlegland 19 */ 20 public interface Curve3D extends Shape3D { 21 22 /** 23 * Get value of parameter t for the first point of the curve. It can be 24 * -Infinity, in this case the piece of curve is not bounded. 25 */ 26 public abstract double getT0(); 27 28 /** 29 * Get value of parameter t for the last point of the curve. It can be 30 * +Infinity, in this case the piece of curve is not bounded. 31 */ 32 public abstract double getT1(); 33 34 /** 35 * Gets the point from a parametric representation of the curve. If the 36 * parameter lies outside the definition range, the parameter corresponding 37 * to the closest bound is used instead. This method can be used to draw an 38 * approximated outline of a curve, by selecting multiple values for t and 39 * drawing lines between them. 40 */ 41 public abstract Point3D getPoint(double t); 42 43 /** 44 * Same as getPoint(t), but gives the point as a parameter. This avoids 45 * repetitive memory allocations. 46 */ 47 public abstract Point3D getPoint(double t, Point3D point); 48 49 /** 50 * Get the first point of the curve. It must returns the same result as 51 * <code>getPoint(getT0())</code>. 52 * 53 * @return the first point of the curve 54 */ 55 public abstract Point3D getFirstPoint(); 56 57 /** 58 * Get the last point of the curve. It must returns the same result as 59 * <code>getPoint(getT1())</code>. 60 * 61 * @return the last point of the curve. 62 */ 63 public abstract Point3D getLastPoint(); 64 65 /** 66 * Returns a set of singular points, i. e. which do not locally admit 67 * derivative. 68 * 69 * @return a collection of Point3D. 70 */ 71 public abstract Collection<Point3D> getSingularPoints(); 72 73 /** 74 * Get position of the point on the curve. If the point does not belong to 75 * the curve, return Double.NaN. 76 * 77 * @param point a point belonging to the curve 78 * @return the position of the point on the curve 79 */ 80 public abstract double getPosition(Point3D point); 81 82 /** 83 * Returns the position of the closest orthogonal projection of the point on 84 * the curve, or of the closest singular point. This function should always 85 * returns a valid value. 86 * 87 * @param point a point to project 88 * @return the position of the closest orthogonal projection 89 */ 90 public abstract double project(Point3D point); 91 92 /** 93 * Returns the curve with same trace on the plane with parametrization in 94 * reverse order. 95 */ 96 public abstract Curve3D getReverseCurve(); 97 98 /** 99 * Returns the collection of continuous curves which constitute this curve. 100 * 101 * @return a collection of continuous curves. 102 */ 103 public abstract Collection<? extends ContinuousCurve3D> getContinuousCurves(); 104 105 /** 106 * Returns a portion of the original curve, delimited by two positions on 107 * the curve. 108 * 109 * @param t0 position of the start of the sub-curve 110 * @param t1 position of the end of the sub-curve 111 * @return the portion of original curve comprised between t0 and t1. 112 */ 113 public abstract Curve3D getSubCurve(double t0, double t1); 114 115 /** 116 * Transforms the curve by an affine transform. The result is an instance of 117 * Curve3D. 118 */ 119 public abstract Curve3D transform(AffineTransform3D trans); 120 121 // /** 122 // * When a curve is clipped, the result is a set of curves. 123 // */ 124 // public abstract CurveSet2D<? extends Curve3D> clip(Box2D box); 125 }