Alexandria 2.31.0
SDC-CH common library for the Euclid project
Loading...
Searching...
No Matches
Solvers.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2012-2021 Euclid Science Ground Segment
3 *
4 * This library is free software; you can redistribute it and/or modify it under
5 * the terms of the GNU Lesser General Public License as published by the Free
6 * Software Foundation; either version 3.0 of the License, or (at your option)
7 * any later version.
8 *
9 * This library is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12 * details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this library; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
20#include <cmath>
21
22namespace Euclid {
23namespace MathUtils {
24
25std::pair<double, double> solveSquare(double a, double b, double c, double y) {
26 if (a != 0.) {
27 double exprb = b / (2 * a);
28 exprb *= exprb;
29 double sr = std::sqrt((y - c) / a + exprb);
30 return std::make_pair(-sr - b / (2 * a), sr - b / (2 * a));
31 } else if (b != 0.) {
32 return std::make_pair((y - c) / b, (y - c) / b);
33 }
34 throw Elements::Exception() << "Can not solve y = 0x^2 + 0x + c";
35}
36
37} // namespace MathUtils
38} // namespace Euclid
T make_pair(T... args)
std::array< std::vector< double >, N > Coordinates
Used to pass the grid coordinates to interpn. Internally will make a copy of the required values.
std::pair< double, double > solveSquare(double a, double b, double c, double y)
Definition Solvers.cpp:25
T sqrt(T... args)