MCPcopy Create free account
hub / github.com/BIMCoderLiang/LNLib / PowerToBezierMatrix

Method PowerToBezierMatrix

src/LNLib/Algorithm/Polynomials.cpp:622–657  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

620}
621
622std::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}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected