package androidx.constraintlayout.motion.utils; import java.lang.reflect.Array; import tech.rabbit.r1launcher.BuildConfig; /* loaded from: classes.dex */ public class HyperSpline { double[][] mCtl; Cubic[][] mCurve; double[] mCurveLength; int mDimensionality; int mPoints; double mTotalLength; public HyperSpline(double[][] dArr) { setup(dArr); } public HyperSpline() { } public void setup(double[][] dArr) { int i; int length = dArr[0].length; this.mDimensionality = length; int length2 = dArr.length; this.mPoints = length2; this.mCtl = (double[][]) Array.newInstance((Class) Double.TYPE, length, length2); this.mCurve = new Cubic[this.mDimensionality]; for (int i2 = 0; i2 < this.mDimensionality; i2++) { for (int i3 = 0; i3 < this.mPoints; i3++) { this.mCtl[i2][i3] = dArr[i3][i2]; } } int i4 = 0; while (true) { i = this.mDimensionality; if (i4 >= i) { break; } Cubic[][] cubicArr = this.mCurve; double[] dArr2 = this.mCtl[i4]; cubicArr[i4] = calcNaturalCubic(dArr2.length, dArr2); i4++; } this.mCurveLength = new double[this.mPoints - 1]; this.mTotalLength = BuildConfig.SENTRY_SAMPLE_RATE; Cubic[] cubicArr2 = new Cubic[i]; for (int i5 = 0; i5 < this.mCurveLength.length; i5++) { for (int i6 = 0; i6 < this.mDimensionality; i6++) { cubicArr2[i6] = this.mCurve[i6][i5]; } double d = this.mTotalLength; double[] dArr3 = this.mCurveLength; double approxLength = approxLength(cubicArr2); dArr3[i5] = approxLength; this.mTotalLength = d + approxLength; } } public void getVelocity(double d, double[] dArr) { double d2 = d * this.mTotalLength; int i = 0; while (true) { double[] dArr2 = this.mCurveLength; if (i >= dArr2.length - 1) { break; } double d3 = dArr2[i]; if (d3 >= d2) { break; } d2 -= d3; i++; } for (int i2 = 0; i2 < dArr.length; i2++) { dArr[i2] = this.mCurve[i2][i].vel(d2 / this.mCurveLength[i]); } } public void getPos(double d, double[] dArr) { double d2 = d * this.mTotalLength; int i = 0; while (true) { double[] dArr2 = this.mCurveLength; if (i >= dArr2.length - 1) { break; } double d3 = dArr2[i]; if (d3 >= d2) { break; } d2 -= d3; i++; } for (int i2 = 0; i2 < dArr.length; i2++) { dArr[i2] = this.mCurve[i2][i].eval(d2 / this.mCurveLength[i]); } } public void getPos(double d, float[] fArr) { double d2 = d * this.mTotalLength; int i = 0; while (true) { double[] dArr = this.mCurveLength; if (i >= dArr.length - 1) { break; } double d3 = dArr[i]; if (d3 >= d2) { break; } d2 -= d3; i++; } for (int i2 = 0; i2 < fArr.length; i2++) { fArr[i2] = (float) this.mCurve[i2][i].eval(d2 / this.mCurveLength[i]); } } public double getPos(double d, int i) { double[] dArr; double d2 = d * this.mTotalLength; int i2 = 0; while (true) { dArr = this.mCurveLength; if (i2 >= dArr.length - 1) { break; } double d3 = dArr[i2]; if (d3 >= d2) { break; } d2 -= d3; i2++; } return this.mCurve[i][i2].eval(d2 / dArr[i2]); } public double approxLength(Cubic[] cubicArr) { int i; int length = cubicArr.length; double[] dArr = new double[cubicArr.length]; double d = BuildConfig.SENTRY_SAMPLE_RATE; double d2 = 0.0d; double d3 = 0.0d; while (true) { i = 0; if (d2 >= 1.0d) { break; } double d4 = 0.0d; while (i < cubicArr.length) { double d5 = dArr[i]; double eval = cubicArr[i].eval(d2); dArr[i] = eval; double d6 = d5 - eval; d4 += d6 * d6; i++; } if (d2 > BuildConfig.SENTRY_SAMPLE_RATE) { d3 += Math.sqrt(d4); } d2 += 0.1d; } while (i < cubicArr.length) { double d7 = dArr[i]; double eval2 = cubicArr[i].eval(1.0d); dArr[i] = eval2; double d8 = d7 - eval2; d += d8 * d8; i++; } return d3 + Math.sqrt(d); } static Cubic[] calcNaturalCubic(int i, double[] dArr) { double[] dArr2 = new double[i]; double[] dArr3 = new double[i]; double[] dArr4 = new double[i]; int i2 = i - 1; int i3 = 0; dArr2[0] = 0.5d; int i4 = 1; for (int i5 = 1; i5 < i2; i5++) { dArr2[i5] = 1.0d / (4.0d - dArr2[i5 - 1]); } int i6 = i - 2; dArr2[i2] = 1.0d / (2.0d - dArr2[i6]); dArr3[0] = (dArr[1] - dArr[0]) * 3.0d * dArr2[0]; while (i4 < i2) { int i7 = i4 + 1; int i8 = i4 - 1; dArr3[i4] = (((dArr[i7] - dArr[i8]) * 3.0d) - dArr3[i8]) * dArr2[i4]; i4 = i7; } double d = (((dArr[i2] - dArr[i6]) * 3.0d) - dArr3[i6]) * dArr2[i2]; dArr3[i2] = d; dArr4[i2] = d; while (i6 >= 0) { dArr4[i6] = dArr3[i6] - (dArr2[i6] * dArr4[i6 + 1]); i6--; } Cubic[] cubicArr = new Cubic[i2]; while (i3 < i2) { double d2 = dArr[i3]; double d3 = dArr4[i3]; int i9 = i3 + 1; double d4 = dArr[i9]; double d5 = dArr4[i9]; cubicArr[i3] = new Cubic((float) d2, d3, (((d4 - d2) * 3.0d) - (d3 * 2.0d)) - d5, ((d2 - d4) * 2.0d) + d3 + d5); i3 = i9; } return cubicArr; } /* loaded from: classes.dex */ public static class Cubic { public static final double HALF = 0.5d; public static final double THIRD = 0.3333333333333333d; double mA; double mB; double mC; double mD; public double eval(double d) { return (((((this.mD * d) + this.mC) * d) + this.mB) * d) + this.mA; } public double vel(double d) { return (((this.mD * 0.3333333333333333d * d) + (this.mC * 0.5d)) * d) + this.mB; } public Cubic(double d, double d2, double d3, double d4) { this.mA = d; this.mB = d2; this.mC = d3; this.mD = d4; } } }