| 620 | } |
| 621 | |
| 622 | std::vector<std::vector<double>> LNLib::Polynomials::PowerToBezierMatrix(int degree, const std::vector<std::vector<double>>& matrix) |
| 623 | { |
| 624 | std::vector<std::vector<double>> inverseMatrix(degree + 1, std::vector<double>(degree + 1)); |
| 625 | for (int i = 0; i < degree; i++) |
| 626 | { |
| 627 | for (int j = i + 1; j <= degree; j++) |
| 628 | { |
| 629 | inverseMatrix[i][j] = 0.0; |
| 630 | } |
| 631 | } |
| 632 | |
| 633 | for (int i = 0; i <= degree; i++) |
| 634 | { |
| 635 | inverseMatrix[i][0] = inverseMatrix[degree][i] = 1.0; |
| 636 | inverseMatrix[i][i] = 1.0 / (matrix[i][i]); |
| 637 | } |
| 638 | |
| 639 | int k1 = (degree + 1) / 2; |
| 640 | int pk = degree - 1; |
| 641 | |
| 642 | for (int k = 1; k < k1; k++) |
| 643 | { |
| 644 | for (int j = k + 1; j <= pk; j++) |
| 645 | { |
| 646 | double d = 0.0; |
| 647 | for (int i = k; i < j; i++) |
| 648 | { |
| 649 | d = d - matrix[j][i] * inverseMatrix[i][k]; |
| 650 | } |
| 651 | inverseMatrix[j][k] = d / (matrix[j][j]); |
| 652 | inverseMatrix[pk][degree - j] = inverseMatrix[j][k]; |
| 653 | } |
| 654 | pk = pk - 1; |
| 655 | } |
| 656 | return inverseMatrix; |
| 657 | } |
nothing calls this directly
no outgoing calls
no test coverage detected