diff --git a/src/pocketmine/math/Math.php b/src/pocketmine/math/Math.php index 95a959fa0..025186c9d 100644 --- a/src/pocketmine/math/Math.php +++ b/src/pocketmine/math/Math.php @@ -38,4 +38,30 @@ abstract class Math{ $i = (int) ($n + 1); return $n >= $i ? $i : $i - 1; } + + /** + * Solves a quadratic equation with the given coefficients and returns an array of up to two solutions. + * + * @param float $a + * @param float $b + * @param float $c + * + * @return float[] + */ + public static function solveQuadratic(float $a, float $b, float $c) : array{ + $discriminant = $b ** 2 - 4 * $a * $c; + if($discriminant > 0){ //2 real roots + $sqrtDiscriminant = sqrt($discriminant); + return [ + (-$b + $sqrtDiscriminant) / (2 * $a), + (-$b - $sqrtDiscriminant) / (2 * $a) + ]; + }elseif($discriminant == 0){ //1 real root + return [ + -$b / (2 * $a) + ]; + }else{ //No real roots + return []; + } + } }