Source code: com/arranger/jarl/util/InterpolateUtil.java
1 package com.arranger.jarl.util;
2
3 import com.arranger.jarl.base.ITimedJarlObject;
4 import com.arranger.jarl.base.Time;
5
6 import java.awt.geom.Point2D;
7 import java.util.ArrayList;
8
9 /**
10 * InterpolateUtil created on Feb 21, 2003
11 */
12 public class InterpolateUtil {
13
14 public static InterpolationPair[] createSegmentPairs(Point2D[] points) {
15 java.util.List pairs = new ArrayList();
16
17 for (int index = 0; index < points.length - 1; index++) {
18 Point2D point1 = points[index];
19 Point2D point2 = points[index + 1];
20 InterpolationPair segmentPair = new InterpolationPair(
21 new InterpolationPair.Segment(point1.getX(), point1.getY()),
22 new InterpolationPair.Segment(point2.getX(), point2.getY())
23 );
24 pairs.add(segmentPair);
25 }
26
27 InterpolationPair[] results = new InterpolationPair[pairs.size()];
28 return (InterpolationPair[]) pairs.toArray(results);
29 }
30
31 public static InterpolationPair getSegment(double x, InterpolationPair[] segmentPairs) {
32 for (int index = 0; index < segmentPairs.length; index++) {
33 InterpolationPair interpolationPair = segmentPairs[index];
34 if (interpolationPair.checkRange(x) == 0) {
35 return interpolationPair;
36 }
37 }
38 return segmentPairs[segmentPairs.length - 1];
39 }
40
41 /**
42 * Get the pct into rendering this timedObj
43 * @param timedObj
44 * @param currentTime
45 * @return the current pct in rendering this timedObj
46 */
47 public static double interpolate(ITimedJarlObject timedObj, Time currentTime) {
48 return (double)WidgetUtil.getRelativeTime(timedObj, currentTime).getFrame() /
49 (double)(timedObj.getEndTime().getFrame() - timedObj.getStartTime().getFrame());
50 }
51
52 /**
53 * Based on the current time interpolate
54 *
55 * @param startTime
56 * @param endTime
57 * @param startValue
58 * @param endValue
59 * @param currentTime
60 */
61 public static double interpolate(Time startTime,
62 Time endTime,
63 double startValue,
64 double endValue,
65 Time currentTime) {
66 InterpolationPair segmentPair = new InterpolationPair(
67 new InterpolationPair.Segment(startTime.getFrame(), startValue),
68 new InterpolationPair.Segment(endTime.getFrame(), endValue)
69 );
70
71 return segmentPair.getYValue(currentTime.getFrame());
72 }
73
74 /**
75 *
76 * @param x1
77 * @param x2
78 * @param y1
79 * @param y2
80 * @param currentX
81 */
82 public static double interpolate(double x1, double x2, double y1, double y2, double currentX) {
83 InterpolationPair segmentPair = new InterpolationPair(
84 new InterpolationPair.Segment(x1, y1),
85 new InterpolationPair.Segment(x2, y2)
86 );
87
88 return segmentPair.getYValue(currentX);
89 }
90 }