From 2cfa61f33560806703a6ce1b5adb114af65d9f7c Mon Sep 17 00:00:00 2001 From: labourasse <labourassee@gmail.com> Date: Sun, 3 Jul 2022 20:29:56 +0200 Subject: [PATCH] add offstream for 2 variables polynomials --- src/analysis/PolynomialP.hpp | 71 ++++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 15 deletions(-) diff --git a/src/analysis/PolynomialP.hpp b/src/analysis/PolynomialP.hpp index 5911d86d8..253e6369b 100644 --- a/src/analysis/PolynomialP.hpp +++ b/src/analysis/PolynomialP.hpp @@ -379,29 +379,70 @@ class PolynomialP } return os; } else if constexpr (Dimension == 2) { - for (size_t j = N; j > 0; --j) { - for (size_t i = N - j; i > 0; --i) { - double coef = P[i, j]; - if (coef != 0.) { - if (coef > 0.) { - os << " + "; - } else if (coef < 0.) { - os << " - "; - } - if (coef != 1 && coef != -1) { - os << std::abs(coef); + size_t i = 0; + size_t j = N; + TinyVector<Dimension, size_t> rel_pos(i, j); + double coef = P[rel_pos]; + if (coef != 0.) { + if (coef < 0.) { + os << " - "; + } + if (coef != 1 && coef != -1) { + os << std::abs(coef); + } + os << "y^" << N; + } + size_t degree = N; + for (size_t k = size_coef - 1; k > 0; --k) { + if (j > 0) { + j--; + i++; + } else { + degree--; + j = degree; + i = 0; + } + rel_pos = TinyVector<Dimension, size_t>(i, j); + double coef = P[rel_pos]; + if (coef != 0.) { + if (coef > 0.) { + os << " + "; + } else if (coef < 0.) { + os << " - "; + } + if ((coef != 1 && coef != -1) || (i == 0 && j == 0)) { + os << std::abs(coef); + } + if (i == 0 && j == 0) + continue; + if (i == 0) { + if (j != 1) { + os << "y^" << j; + } else { + os << "y"; } - if (i == 0) { - os << "y" << j; - } else if (j == 0) { + } else if (j == 0) { + if (i == 1) { + os << "x"; + } else { os << "x^" << i; + } + } else { + if (i == 1 && j == 1) { + os << "xy"; + } else if (i == 1) { + os << "x" + << "y^" << j; + } else if (j == 1) { + os << "x^" << i << "y"; } else { os << "x^" << i << "y^" << j; } - all_coef_zero = false; } + all_coef_zero = false; } } + return os; } else { throw NotImplementedError("Not yet Available in 3D"); -- GitLab