mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-30 11:02:31 -06:00
441 lines
14 KiB
Java
441 lines
14 KiB
Java
package androidx.constraintlayout.motion.utils;
|
|
|
|
import java.util.Arrays;
|
|
import tech.rabbit.r1launcher.BuildConfig;
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
/* loaded from: classes.dex */
|
|
public class ArcCurveFit extends CurveFit {
|
|
public static final int ARC_START_FLIP = 3;
|
|
public static final int ARC_START_HORIZONTAL = 2;
|
|
public static final int ARC_START_LINEAR = 0;
|
|
public static final int ARC_START_VERTICAL = 1;
|
|
private static final int START_HORIZONTAL = 2;
|
|
private static final int START_LINEAR = 3;
|
|
private static final int START_VERTICAL = 1;
|
|
Arc[] mArcs;
|
|
private final double[] mTime;
|
|
|
|
@Override // androidx.constraintlayout.motion.utils.CurveFit
|
|
public double[] getTimePoints() {
|
|
return this.mTime;
|
|
}
|
|
|
|
@Override // androidx.constraintlayout.motion.utils.CurveFit
|
|
public void getPos(double d, double[] dArr) {
|
|
if (d < this.mArcs[0].mTime1) {
|
|
d = this.mArcs[0].mTime1;
|
|
}
|
|
Arc[] arcArr = this.mArcs;
|
|
if (d > arcArr[arcArr.length - 1].mTime2) {
|
|
Arc[] arcArr2 = this.mArcs;
|
|
d = arcArr2[arcArr2.length - 1].mTime2;
|
|
}
|
|
int i = 0;
|
|
while (true) {
|
|
Arc[] arcArr3 = this.mArcs;
|
|
if (i >= arcArr3.length) {
|
|
return;
|
|
}
|
|
if (d <= arcArr3[i].mTime2) {
|
|
if (this.mArcs[i].linear) {
|
|
dArr[0] = this.mArcs[i].getLinearX(d);
|
|
dArr[1] = this.mArcs[i].getLinearY(d);
|
|
return;
|
|
} else {
|
|
this.mArcs[i].setPoint(d);
|
|
dArr[0] = this.mArcs[i].getX();
|
|
dArr[1] = this.mArcs[i].getY();
|
|
return;
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|
|
@Override // androidx.constraintlayout.motion.utils.CurveFit
|
|
public void getPos(double d, float[] fArr) {
|
|
if (d < this.mArcs[0].mTime1) {
|
|
d = this.mArcs[0].mTime1;
|
|
} else {
|
|
Arc[] arcArr = this.mArcs;
|
|
if (d > arcArr[arcArr.length - 1].mTime2) {
|
|
Arc[] arcArr2 = this.mArcs;
|
|
d = arcArr2[arcArr2.length - 1].mTime2;
|
|
}
|
|
}
|
|
int i = 0;
|
|
while (true) {
|
|
Arc[] arcArr3 = this.mArcs;
|
|
if (i >= arcArr3.length) {
|
|
return;
|
|
}
|
|
if (d <= arcArr3[i].mTime2) {
|
|
if (this.mArcs[i].linear) {
|
|
fArr[0] = (float) this.mArcs[i].getLinearX(d);
|
|
fArr[1] = (float) this.mArcs[i].getLinearY(d);
|
|
return;
|
|
} else {
|
|
this.mArcs[i].setPoint(d);
|
|
fArr[0] = (float) this.mArcs[i].getX();
|
|
fArr[1] = (float) this.mArcs[i].getY();
|
|
return;
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|
|
@Override // androidx.constraintlayout.motion.utils.CurveFit
|
|
public void getSlope(double d, double[] dArr) {
|
|
if (d < this.mArcs[0].mTime1) {
|
|
d = this.mArcs[0].mTime1;
|
|
} else {
|
|
Arc[] arcArr = this.mArcs;
|
|
if (d > arcArr[arcArr.length - 1].mTime2) {
|
|
Arc[] arcArr2 = this.mArcs;
|
|
d = arcArr2[arcArr2.length - 1].mTime2;
|
|
}
|
|
}
|
|
int i = 0;
|
|
while (true) {
|
|
Arc[] arcArr3 = this.mArcs;
|
|
if (i >= arcArr3.length) {
|
|
return;
|
|
}
|
|
if (d <= arcArr3[i].mTime2) {
|
|
if (this.mArcs[i].linear) {
|
|
dArr[0] = this.mArcs[i].getLinearDX(d);
|
|
dArr[1] = this.mArcs[i].getLinearDY(d);
|
|
return;
|
|
} else {
|
|
this.mArcs[i].setPoint(d);
|
|
dArr[0] = this.mArcs[i].getDX();
|
|
dArr[1] = this.mArcs[i].getDY();
|
|
return;
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|
|
@Override // androidx.constraintlayout.motion.utils.CurveFit
|
|
public double getPos(double d, int i) {
|
|
int i2 = 0;
|
|
if (d < this.mArcs[0].mTime1) {
|
|
d = this.mArcs[0].mTime1;
|
|
} else {
|
|
if (d > this.mArcs[r0.length - 1].mTime2) {
|
|
d = this.mArcs[r5.length - 1].mTime2;
|
|
}
|
|
}
|
|
while (true) {
|
|
Arc[] arcArr = this.mArcs;
|
|
if (i2 >= arcArr.length) {
|
|
return Double.NaN;
|
|
}
|
|
if (d <= arcArr[i2].mTime2) {
|
|
if (this.mArcs[i2].linear) {
|
|
if (i == 0) {
|
|
return this.mArcs[i2].getLinearX(d);
|
|
}
|
|
return this.mArcs[i2].getLinearY(d);
|
|
}
|
|
this.mArcs[i2].setPoint(d);
|
|
if (i == 0) {
|
|
return this.mArcs[i2].getX();
|
|
}
|
|
return this.mArcs[i2].getY();
|
|
}
|
|
i2++;
|
|
}
|
|
}
|
|
|
|
@Override // androidx.constraintlayout.motion.utils.CurveFit
|
|
public double getSlope(double d, int i) {
|
|
int i2 = 0;
|
|
if (d < this.mArcs[0].mTime1) {
|
|
d = this.mArcs[0].mTime1;
|
|
}
|
|
if (d > this.mArcs[r0.length - 1].mTime2) {
|
|
d = this.mArcs[r5.length - 1].mTime2;
|
|
}
|
|
while (true) {
|
|
Arc[] arcArr = this.mArcs;
|
|
if (i2 >= arcArr.length) {
|
|
return Double.NaN;
|
|
}
|
|
if (d <= arcArr[i2].mTime2) {
|
|
if (this.mArcs[i2].linear) {
|
|
if (i == 0) {
|
|
return this.mArcs[i2].getLinearDX(d);
|
|
}
|
|
return this.mArcs[i2].getLinearDY(d);
|
|
}
|
|
this.mArcs[i2].setPoint(d);
|
|
if (i == 0) {
|
|
return this.mArcs[i2].getDX();
|
|
}
|
|
return this.mArcs[i2].getDY();
|
|
}
|
|
i2++;
|
|
}
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:10:0x0026, code lost:
|
|
|
|
if (r5 == 1) goto L13;
|
|
*/
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
public ArcCurveFit(int[] r25, double[] r26, double[][] r27) {
|
|
/*
|
|
r24 = this;
|
|
r0 = r24
|
|
r1 = r26
|
|
r24.<init>()
|
|
r0.mTime = r1
|
|
int r2 = r1.length
|
|
r3 = 1
|
|
int r2 = r2 - r3
|
|
androidx.constraintlayout.motion.utils.ArcCurveFit$Arc[] r2 = new androidx.constraintlayout.motion.utils.ArcCurveFit.Arc[r2]
|
|
r0.mArcs = r2
|
|
r2 = 0
|
|
r4 = r2
|
|
r5 = r3
|
|
r6 = r5
|
|
L14:
|
|
androidx.constraintlayout.motion.utils.ArcCurveFit$Arc[] r7 = r0.mArcs
|
|
int r8 = r7.length
|
|
if (r4 >= r8) goto L4d
|
|
r8 = r25[r4]
|
|
r9 = 3
|
|
if (r8 == 0) goto L2d
|
|
if (r8 == r3) goto L2a
|
|
r10 = 2
|
|
if (r8 == r10) goto L28
|
|
if (r8 == r9) goto L26
|
|
goto L2e
|
|
L26:
|
|
if (r5 != r3) goto L2a
|
|
L28:
|
|
r5 = r10
|
|
goto L2b
|
|
L2a:
|
|
r5 = r3
|
|
L2b:
|
|
r6 = r5
|
|
goto L2e
|
|
L2d:
|
|
r6 = r9
|
|
L2e:
|
|
androidx.constraintlayout.motion.utils.ArcCurveFit$Arc r22 = new androidx.constraintlayout.motion.utils.ArcCurveFit$Arc
|
|
r10 = r1[r4]
|
|
int r23 = r4 + 1
|
|
r12 = r1[r23]
|
|
r8 = r27[r4]
|
|
r14 = r8[r2]
|
|
r16 = r8[r3]
|
|
r8 = r27[r23]
|
|
r18 = r8[r2]
|
|
r20 = r8[r3]
|
|
r8 = r22
|
|
r9 = r6
|
|
r8.<init>(r9, r10, r12, r14, r16, r18, r20)
|
|
r7[r4] = r22
|
|
r4 = r23
|
|
goto L14
|
|
L4d:
|
|
return
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: androidx.constraintlayout.motion.utils.ArcCurveFit.<init>(int[], double[], double[][]):void");
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
private static class Arc {
|
|
private static final double EPSILON = 0.001d;
|
|
private static final String TAG = "Arc";
|
|
private static double[] ourPercent = new double[91];
|
|
boolean linear;
|
|
double mArcDistance;
|
|
double mArcVelocity;
|
|
double mEllipseA;
|
|
double mEllipseB;
|
|
double mEllipseCenterX;
|
|
double mEllipseCenterY;
|
|
double[] mLut;
|
|
double mOneOverDeltaTime;
|
|
double mTime1;
|
|
double mTime2;
|
|
double mTmpCosAngle;
|
|
double mTmpSinAngle;
|
|
boolean mVertical;
|
|
double mX1;
|
|
double mX2;
|
|
double mY1;
|
|
double mY2;
|
|
|
|
public double getLinearDX(double d) {
|
|
return this.mEllipseCenterX;
|
|
}
|
|
|
|
public double getLinearDY(double d) {
|
|
return this.mEllipseCenterY;
|
|
}
|
|
|
|
public double getLinearX(double d) {
|
|
double d2 = (d - this.mTime1) * this.mOneOverDeltaTime;
|
|
double d3 = this.mX1;
|
|
return d3 + (d2 * (this.mX2 - d3));
|
|
}
|
|
|
|
public double getLinearY(double d) {
|
|
double d2 = (d - this.mTime1) * this.mOneOverDeltaTime;
|
|
double d3 = this.mY1;
|
|
return d3 + (d2 * (this.mY2 - d3));
|
|
}
|
|
|
|
double getX() {
|
|
return this.mEllipseCenterX + (this.mEllipseA * this.mTmpSinAngle);
|
|
}
|
|
|
|
double getY() {
|
|
return this.mEllipseCenterY + (this.mEllipseB * this.mTmpCosAngle);
|
|
}
|
|
|
|
Arc(int i, double d, double d2, double d3, double d4, double d5, double d6) {
|
|
this.linear = false;
|
|
this.mVertical = i == 1;
|
|
this.mTime1 = d;
|
|
this.mTime2 = d2;
|
|
this.mOneOverDeltaTime = 1.0d / (d2 - d);
|
|
if (3 == i) {
|
|
this.linear = true;
|
|
}
|
|
double d7 = d5 - d3;
|
|
double d8 = d6 - d4;
|
|
if (this.linear || Math.abs(d7) < EPSILON || Math.abs(d8) < EPSILON) {
|
|
this.linear = true;
|
|
this.mX1 = d3;
|
|
this.mX2 = d5;
|
|
this.mY1 = d4;
|
|
this.mY2 = d6;
|
|
double hypot = Math.hypot(d8, d7);
|
|
this.mArcDistance = hypot;
|
|
this.mArcVelocity = hypot * this.mOneOverDeltaTime;
|
|
double d9 = this.mTime2;
|
|
double d10 = this.mTime1;
|
|
this.mEllipseCenterX = d7 / (d9 - d10);
|
|
this.mEllipseCenterY = d8 / (d9 - d10);
|
|
return;
|
|
}
|
|
this.mLut = new double[101];
|
|
boolean z = this.mVertical;
|
|
this.mEllipseA = d7 * (z ? -1 : 1);
|
|
this.mEllipseB = d8 * (z ? 1 : -1);
|
|
this.mEllipseCenterX = z ? d5 : d3;
|
|
this.mEllipseCenterY = z ? d4 : d6;
|
|
buildTable(d3, d4, d5, d6);
|
|
this.mArcVelocity = this.mArcDistance * this.mOneOverDeltaTime;
|
|
}
|
|
|
|
void setPoint(double d) {
|
|
double lookup = lookup((this.mVertical ? this.mTime2 - d : d - this.mTime1) * this.mOneOverDeltaTime) * 1.5707963267948966d;
|
|
this.mTmpSinAngle = Math.sin(lookup);
|
|
this.mTmpCosAngle = Math.cos(lookup);
|
|
}
|
|
|
|
double getDX() {
|
|
double d = this.mEllipseA * this.mTmpCosAngle;
|
|
double hypot = this.mArcVelocity / Math.hypot(d, (-this.mEllipseB) * this.mTmpSinAngle);
|
|
if (this.mVertical) {
|
|
d = -d;
|
|
}
|
|
return d * hypot;
|
|
}
|
|
|
|
double getDY() {
|
|
double d = this.mEllipseA * this.mTmpCosAngle;
|
|
double d2 = (-this.mEllipseB) * this.mTmpSinAngle;
|
|
double hypot = this.mArcVelocity / Math.hypot(d, d2);
|
|
return this.mVertical ? (-d2) * hypot : d2 * hypot;
|
|
}
|
|
|
|
double lookup(double d) {
|
|
if (d <= BuildConfig.SENTRY_SAMPLE_RATE) {
|
|
return BuildConfig.SENTRY_SAMPLE_RATE;
|
|
}
|
|
if (d >= 1.0d) {
|
|
return 1.0d;
|
|
}
|
|
double[] dArr = this.mLut;
|
|
double length = d * (dArr.length - 1);
|
|
int i = (int) length;
|
|
double d2 = length - i;
|
|
double d3 = dArr[i];
|
|
return d3 + (d2 * (dArr[i + 1] - d3));
|
|
}
|
|
|
|
private void buildTable(double d, double d2, double d3, double d4) {
|
|
double d5;
|
|
double d6 = d3 - d;
|
|
double d7 = d2 - d4;
|
|
int i = 0;
|
|
double d8 = BuildConfig.SENTRY_SAMPLE_RATE;
|
|
double d9 = BuildConfig.SENTRY_SAMPLE_RATE;
|
|
double d10 = BuildConfig.SENTRY_SAMPLE_RATE;
|
|
while (true) {
|
|
if (i >= ourPercent.length) {
|
|
break;
|
|
}
|
|
double d11 = d8;
|
|
double radians = Math.toRadians((i * 90.0d) / (r15.length - 1));
|
|
double sin = Math.sin(radians) * d6;
|
|
double cos = Math.cos(radians) * d7;
|
|
if (i > 0) {
|
|
d5 = Math.hypot(sin - d9, cos - d10) + d11;
|
|
ourPercent[i] = d5;
|
|
} else {
|
|
d5 = d11;
|
|
}
|
|
i++;
|
|
d10 = cos;
|
|
d8 = d5;
|
|
d9 = sin;
|
|
}
|
|
double d12 = d8;
|
|
this.mArcDistance = d12;
|
|
int i2 = 0;
|
|
while (true) {
|
|
double[] dArr = ourPercent;
|
|
if (i2 >= dArr.length) {
|
|
break;
|
|
}
|
|
dArr[i2] = dArr[i2] / d12;
|
|
i2++;
|
|
}
|
|
int i3 = 0;
|
|
while (true) {
|
|
if (i3 >= this.mLut.length) {
|
|
return;
|
|
}
|
|
double length = i3 / (r1.length - 1);
|
|
int binarySearch = Arrays.binarySearch(ourPercent, length);
|
|
if (binarySearch >= 0) {
|
|
this.mLut[i3] = binarySearch / (ourPercent.length - 1);
|
|
} else if (binarySearch == -1) {
|
|
this.mLut[i3] = 0.0d;
|
|
} else {
|
|
int i4 = -binarySearch;
|
|
int i5 = i4 - 2;
|
|
double[] dArr2 = ourPercent;
|
|
double d13 = dArr2[i5];
|
|
this.mLut[i3] = (i5 + ((length - d13) / (dArr2[i4 - 1] - d13))) / (dArr2.length - 1);
|
|
}
|
|
i3++;
|
|
}
|
|
}
|
|
}
|
|
}
|