package com.akjava.gwt.lib.client.game; import java.util.List; /** * http://sole.github.com/tween.js/examples/05_spline.html * @author aki * */ public class Spline { public static PointD get2DPoint(List<PointD> points,double value){ double point = ( points.size() - 1 ) * value; int intPoint = (int) Math.floor( point ); double weight = point - intPoint; int[] c=new int[4]; c[ 0 ] = intPoint == 0 ? intPoint : intPoint - 1; c[ 1 ] = intPoint; c[ 2 ] = intPoint > points.size() - 2 ? intPoint : intPoint + 1; c[ 3 ] = intPoint > points.size() - 3 ? intPoint : intPoint + 2; double x = Spline.interpolate( points.get(c[0]).getX(), points.get(c[1]).getX(),points.get(c[2]).getX(),points.get(c[3]).getX(), weight ); double y = Spline.interpolate( points.get(c[0]).getY(), points.get(c[1]).getY(),points.get(c[2]).getY(),points.get(c[3]).getY(), weight ); return new PointD(x, y); } // Catmull-Rom public static final native double interpolate(double p0,double p1,double p2,double p3,double t)/*-{ var v0 = ( p2 - p0 ) * 0.5; var v1 = ( p3 - p1 ) * 0.5; var t2 = t * t; var t3 = t * t2; return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1; }-*/; }