tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

AxisPhysicsMSDModel.h (2400B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef mozilla_layers_AxisPhysicsMSDModel_h
      8 #define mozilla_layers_AxisPhysicsMSDModel_h
      9 
     10 #include "AxisPhysicsModel.h"
     11 
     12 namespace mozilla {
     13 namespace layers {
     14 
     15 /**
     16 * AxisPhysicsMSDModel encapsulates a 1-dimensional MSD (Mass-Spring-Damper)
     17 * model.  A unit mass is assumed.
     18 */
     19 class AxisPhysicsMSDModel : public AxisPhysicsModel {
     20 public:
     21  AxisPhysicsMSDModel(double aInitialPosition, double aInitialDestination,
     22                      double aInitialVelocity, double aSpringConstant,
     23                      double aDampingRatio);
     24 
     25  virtual ~AxisPhysicsMSDModel();
     26 
     27  /**
     28   * Gets the raw destination of this axis at this moment.
     29   */
     30  double GetDestination() const;
     31 
     32  /**
     33   * Sets the raw destination of this axis at this moment.
     34   */
     35  void SetDestination(double aDestination);
     36 
     37  /**
     38   * Returns true when the position is close to the destination and the
     39   * velocity is low.
     40   */
     41  bool IsFinished(double aSmallestVisibleIncrement) const;
     42 
     43 protected:
     44  double Acceleration(const State& aState) override;
     45 
     46 private:
     47  /**
     48   * mDestination represents the target position and the resting position of
     49   * the simulated spring.
     50   */
     51  double mDestination;
     52 
     53  /**
     54   * Greater values of mSpringConstant result in a stiffer / stronger spring.
     55   */
     56  double mSpringConstant;
     57 
     58  /**
     59   * mSpringConstantSqrtTimesTwo is calculated from mSpringConstant to reduce
     60   * calculations performed in the inner loop.
     61   */
     62  double mSpringConstantSqrtXTwo;
     63 
     64  /**
     65   * Damping Ratio: http://en.wikipedia.org/wiki/Damping_ratio
     66   *
     67   * When mDampingRatio < 1.0, this is an under damped system.
     68   * - Overshoots destination and oscillates with the amplitude gradually
     69   *   decreasing to zero.
     70   *
     71   * When mDampingRatio == 1.0, this is a critically damped system.
     72   * - Reaches destination as quickly as possible without oscillating.
     73   *
     74   * When mDampingRatio > 1.0, this is an over damped system.
     75   * - Reaches destination (exponentially decays) without oscillating.
     76   */
     77  double mDampingRatio;
     78 };
     79 
     80 }  // namespace layers
     81 }  // namespace mozilla
     82 
     83 #endif