/** * @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)); }
/** * 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'); }
public function convert($value, $from, $to) { return MathProvider::divide(MathProvider::multiply($value, $this->getConversionRate($from)), $this->getConversionRate($to)); }
/** * @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); }
/** * 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); }