ADD week 5
This commit is contained in:
		| @@ -0,0 +1,163 @@ | ||||
| package androidx.dynamicanimation.animation; | ||||
|  | ||||
| import androidx.dynamicanimation.animation.DynamicAnimation; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class SpringForce implements Force { | ||||
|     public static final float DAMPING_RATIO_HIGH_BOUNCY = 0.2f; | ||||
|     public static final float DAMPING_RATIO_LOW_BOUNCY = 0.75f; | ||||
|     public static final float DAMPING_RATIO_MEDIUM_BOUNCY = 0.5f; | ||||
|     public static final float DAMPING_RATIO_NO_BOUNCY = 1.0f; | ||||
|     public static final float STIFFNESS_HIGH = 10000.0f; | ||||
|     public static final float STIFFNESS_LOW = 200.0f; | ||||
|     public static final float STIFFNESS_MEDIUM = 1500.0f; | ||||
|     public static final float STIFFNESS_VERY_LOW = 50.0f; | ||||
|     private static final double UNSET = Double.MAX_VALUE; | ||||
|     private static final double VELOCITY_THRESHOLD_MULTIPLIER = 62.5d; | ||||
|     private double mDampedFreq; | ||||
|     double mDampingRatio; | ||||
|     private double mFinalPosition; | ||||
|     private double mGammaMinus; | ||||
|     private double mGammaPlus; | ||||
|     private boolean mInitialized; | ||||
|     private final DynamicAnimation.MassState mMassState; | ||||
|     double mNaturalFreq; | ||||
|     private double mValueThreshold; | ||||
|     private double mVelocityThreshold; | ||||
|  | ||||
|     public float getDampingRatio() { | ||||
|         return (float) this.mDampingRatio; | ||||
|     } | ||||
|  | ||||
|     public float getFinalPosition() { | ||||
|         return (float) this.mFinalPosition; | ||||
|     } | ||||
|  | ||||
|     public float getStiffness() { | ||||
|         double d = this.mNaturalFreq; | ||||
|         return (float) (d * d); | ||||
|     } | ||||
|  | ||||
|     public SpringForce setFinalPosition(float f) { | ||||
|         this.mFinalPosition = f; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public SpringForce() { | ||||
|         this.mNaturalFreq = Math.sqrt(1500.0d); | ||||
|         this.mDampingRatio = 0.5d; | ||||
|         this.mInitialized = false; | ||||
|         this.mFinalPosition = Double.MAX_VALUE; | ||||
|         this.mMassState = new DynamicAnimation.MassState(); | ||||
|     } | ||||
|  | ||||
|     public SpringForce(float f) { | ||||
|         this.mNaturalFreq = Math.sqrt(1500.0d); | ||||
|         this.mDampingRatio = 0.5d; | ||||
|         this.mInitialized = false; | ||||
|         this.mFinalPosition = Double.MAX_VALUE; | ||||
|         this.mMassState = new DynamicAnimation.MassState(); | ||||
|         this.mFinalPosition = f; | ||||
|     } | ||||
|  | ||||
|     public SpringForce setStiffness(float f) { | ||||
|         if (f <= 0.0f) { | ||||
|             throw new IllegalArgumentException("Spring stiffness constant must be positive."); | ||||
|         } | ||||
|         this.mNaturalFreq = Math.sqrt(f); | ||||
|         this.mInitialized = false; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public SpringForce setDampingRatio(float f) { | ||||
|         if (f < 0.0f) { | ||||
|             throw new IllegalArgumentException("Damping ratio must be non-negative"); | ||||
|         } | ||||
|         this.mDampingRatio = f; | ||||
|         this.mInitialized = false; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.dynamicanimation.animation.Force | ||||
|     public float getAcceleration(float f, float f2) { | ||||
|         float finalPosition = f - getFinalPosition(); | ||||
|         double d = this.mNaturalFreq; | ||||
|         return (float) (((-(d * d)) * finalPosition) - (((d * 2.0d) * this.mDampingRatio) * f2)); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.dynamicanimation.animation.Force | ||||
|     public boolean isAtEquilibrium(float f, float f2) { | ||||
|         return ((double) Math.abs(f2)) < this.mVelocityThreshold && ((double) Math.abs(f - getFinalPosition())) < this.mValueThreshold; | ||||
|     } | ||||
|  | ||||
|     private void init() { | ||||
|         if (this.mInitialized) { | ||||
|             return; | ||||
|         } | ||||
|         if (this.mFinalPosition == Double.MAX_VALUE) { | ||||
|             throw new IllegalStateException("Error: Final position of the spring must be set before the animation starts"); | ||||
|         } | ||||
|         double d = this.mDampingRatio; | ||||
|         if (d > 1.0d) { | ||||
|             double d2 = this.mNaturalFreq; | ||||
|             this.mGammaPlus = ((-d) * d2) + (d2 * Math.sqrt((d * d) - 1.0d)); | ||||
|             double d3 = this.mDampingRatio; | ||||
|             double d4 = this.mNaturalFreq; | ||||
|             this.mGammaMinus = ((-d3) * d4) - (d4 * Math.sqrt((d3 * d3) - 1.0d)); | ||||
|         } else if (d >= 0.0d && d < 1.0d) { | ||||
|             this.mDampedFreq = this.mNaturalFreq * Math.sqrt(1.0d - (d * d)); | ||||
|         } | ||||
|         this.mInitialized = true; | ||||
|     } | ||||
|  | ||||
|     DynamicAnimation.MassState updateValues(double d, double d2, long j) { | ||||
|         double cos; | ||||
|         double d3; | ||||
|         init(); | ||||
|         double d4 = j / 1000.0d; | ||||
|         double d5 = d - this.mFinalPosition; | ||||
|         double d6 = this.mDampingRatio; | ||||
|         if (d6 > 1.0d) { | ||||
|             double d7 = this.mGammaMinus; | ||||
|             double d8 = this.mGammaPlus; | ||||
|             double d9 = d5 - (((d7 * d5) - d2) / (d7 - d8)); | ||||
|             double d10 = ((d5 * d7) - d2) / (d7 - d8); | ||||
|             d3 = (Math.pow(2.718281828459045d, d7 * d4) * d9) + (Math.pow(2.718281828459045d, this.mGammaPlus * d4) * d10); | ||||
|             double d11 = this.mGammaMinus; | ||||
|             double pow = d9 * d11 * Math.pow(2.718281828459045d, d11 * d4); | ||||
|             double d12 = this.mGammaPlus; | ||||
|             cos = pow + (d10 * d12 * Math.pow(2.718281828459045d, d12 * d4)); | ||||
|         } else if (d6 == 1.0d) { | ||||
|             double d13 = this.mNaturalFreq; | ||||
|             double d14 = d2 + (d13 * d5); | ||||
|             double d15 = d5 + (d14 * d4); | ||||
|             d3 = Math.pow(2.718281828459045d, (-d13) * d4) * d15; | ||||
|             double pow2 = d15 * Math.pow(2.718281828459045d, (-this.mNaturalFreq) * d4); | ||||
|             double d16 = this.mNaturalFreq; | ||||
|             cos = (d14 * Math.pow(2.718281828459045d, (-d16) * d4)) + (pow2 * (-d16)); | ||||
|         } else { | ||||
|             double d17 = 1.0d / this.mDampedFreq; | ||||
|             double d18 = this.mNaturalFreq; | ||||
|             double d19 = d17 * ((d6 * d18 * d5) + d2); | ||||
|             double pow3 = Math.pow(2.718281828459045d, (-d6) * d18 * d4) * ((Math.cos(this.mDampedFreq * d4) * d5) + (Math.sin(this.mDampedFreq * d4) * d19)); | ||||
|             double d20 = this.mNaturalFreq; | ||||
|             double d21 = this.mDampingRatio; | ||||
|             double d22 = (-d20) * pow3 * d21; | ||||
|             double pow4 = Math.pow(2.718281828459045d, (-d21) * d20 * d4); | ||||
|             double d23 = this.mDampedFreq; | ||||
|             double sin = (-d23) * d5 * Math.sin(d23 * d4); | ||||
|             double d24 = this.mDampedFreq; | ||||
|             cos = d22 + (pow4 * (sin + (d19 * d24 * Math.cos(d24 * d4)))); | ||||
|             d3 = pow3; | ||||
|         } | ||||
|         this.mMassState.mValue = (float) (d3 + this.mFinalPosition); | ||||
|         this.mMassState.mVelocity = (float) cos; | ||||
|         return this.mMassState; | ||||
|     } | ||||
|  | ||||
|     void setValueThreshold(double d) { | ||||
|         double abs = Math.abs(d); | ||||
|         this.mValueThreshold = abs; | ||||
|         this.mVelocityThreshold = abs * VELOCITY_THRESHOLD_MULTIPLIER; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user