1 package org.djutils.draw.curve;
2
3 import org.djutils.draw.curve.Flattener.FlattableCurve;
4 import org.djutils.draw.line.PolyLine2d;
5 import org.djutils.draw.point.DirectedPoint2d;
6 import org.djutils.draw.point.Point2d;
7
8
9
10
11
12
13
14
15
16
17
18 interface Curve2d extends Curve<DirectedPoint2d, Double, Point2d, Flattener2d, PolyLine2d>, FlattableCurve<Point2d, Double>
19 {
20
21 @Override
22 default DirectedPoint2d getStartPoint()
23 {
24 return new DirectedPoint2d(getPoint(0.0), getDirection(0.0));
25 }
26
27 @Override
28 default DirectedPoint2d getEndPoint()
29 {
30 return new DirectedPoint2d(getPoint(1.0), getDirection(1.0));
31 }
32
33 @Override
34 default Double getStartDirection()
35 {
36 return getStartPoint().dirZ;
37 }
38
39 @Override
40 default Double getEndDirection()
41 {
42 return getEndPoint().dirZ;
43 }
44
45 @Override
46 default Double getDirection(final double fraction)
47 {
48 Point2d p1, p2;
49 if (fraction < 0.5)
50 {
51 p1 = getPoint(fraction);
52 p2 = getPoint(fraction + 1e-6);
53 }
54 else
55 {
56 p1 = getPoint(fraction - 1e-6);
57 p2 = getPoint(fraction);
58 }
59 return p1.directionTo(p2);
60 }
61
62 }