Beispiel #1
0
 /**
  * @param Time         $time
  * @param Acceleration $acceleration
  *
  * @return Length
  */
 public static function distanceFromConstantAccel(Time $time, Acceleration $acceleration)
 {
     /**
      * @var Length $distance
      */
     $distance = UnitComposition::naiveMultiOpt([$time, $time, $acceleration], []);
     return $distance->preConvertedSubtract(MathProvider::divide($distance->getValue(), 2));
 }
Beispiel #2
0
 /**
  * This method returns the time, in days, to get to a target using conventional thrust. Possible units:
  *
  * - AU (Astronomical Units)
  * - km (kilometers)
  * - m (meters)
  * - ly (light years)
  *
  * @param $distance
  * @param $unit
  * @return Time
  */
 protected function getTimeToDistance($distance, $unit = 'AU')
 {
     $distance = new Length($distance, $unit);
     $distance->preConvertedSubtract(MathProvider::divide($distance->getValue(), 2, 2));
     $acceleration = $this->getAcceleration();
     $time = PhysicsProvider::timeFromConstantAccel($distance, $acceleration);
     $time->preConvertedAdd($time->getValue());
     return $time->to('d');
 }
Beispiel #3
0
 public function convert($value, $from, $to)
 {
     return MathProvider::divide(MathProvider::multiply($value, $this->getConversionRate($from)), $this->getConversionRate($to));
 }
Beispiel #4
0
 /**
  * @param Quantity[] $mults
  * @param Quantity[] $divides
  */
 public static function naiveMultiOpt($mults, $divides, $precision = 2)
 {
     $newUnit = self::getMultiUnits($mults, $divides);
     $newVal = 1;
     foreach ($mults as $quantity) {
         $newVal = MathProvider::multiply($newVal, $quantity->toNative()->getValue());
     }
     foreach ($divides as $quantity) {
         $newVal = MathProvider::divide($newVal, $quantity->toNative()->getValue(), $precision);
     }
     return $newUnit->preConvertedAdd($newVal);
 }
Beispiel #5
0
 /**
  * Surface gravity in meters per second squared
  *
  * @return string
  */
 public function getSurfaceGravity()
 {
     return $this->math->divide($this->math->multiply($this->mass, self::$GRAVITATION), $this->math->exp($this->radius, '2'), 2);
 }