|
@@ -1,65 +0,0 @@
|
|
|
-// This file is part of libigl, a simple c++ geometry processing library.
|
|
|
-//
|
|
|
-// Copyright (C) 2014 Daniele Panozzo <daniele.panozzo@gmail.com>
|
|
|
-//
|
|
|
-// This Source Code Form is subject to the terms of the Mozilla Public License
|
|
|
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can
|
|
|
-// obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
-#include "kronecker_product.h"
|
|
|
-
|
|
|
-//// Bug in unsupported/Eigen/SparseExtra needs iostream first
|
|
|
-//#include <iostream>
|
|
|
-//#include <unsupported/Eigen/SparseExtra>
|
|
|
-//
|
|
|
-//template <typename Scalar>
|
|
|
-//IGL_INLINE Eigen::SparseMatrix<Scalar> igl::kronecker_product(
|
|
|
-// const Eigen::SparseMatrix<Scalar> & A,
|
|
|
-// const Eigen::SparseMatrix<Scalar> & B)
|
|
|
-//{
|
|
|
-// using namespace Eigen;
|
|
|
-// using namespace std;
|
|
|
-//
|
|
|
-// // Convert B in triplets format
|
|
|
-// MatrixXd B_triplets(B.nonZeros(),3);
|
|
|
-// int count = 0;
|
|
|
-// for (int k=0; k<B.outerSize(); ++k)
|
|
|
-// for (SparseMatrix<double>::InnerIterator it(B,k); it; ++it)
|
|
|
-// B_triplets.row(count++) << it.row(), it.col(), it.value();
|
|
|
-//
|
|
|
-// MatrixXd C_triplets(B_triplets.rows()*A.nonZeros(),3);
|
|
|
-// count = 0;
|
|
|
-// for (int k=0; k<A.outerSize(); ++k)
|
|
|
-// for (SparseMatrix<double>::InnerIterator it(A,k); it; ++it)
|
|
|
-// {
|
|
|
-// int i = it.row();
|
|
|
-// int j = it.col();
|
|
|
-// double v = it.value();
|
|
|
-//
|
|
|
-// MatrixXd B_triplets_copy = B_triplets;
|
|
|
-// B_triplets_copy.col(0) = B_triplets_copy.col(0).array() + double(B.rows()*i);
|
|
|
-// B_triplets_copy.col(1) = B_triplets_copy.col(1).array() + double(B.cols()*j);
|
|
|
-// B_triplets_copy.col(2) = B_triplets_copy.col(2).array() * v;
|
|
|
-//
|
|
|
-// C_triplets.block(count*B_triplets.rows(),0,
|
|
|
-// B_triplets.rows(), B_triplets.cols()) = B_triplets_copy;
|
|
|
-//
|
|
|
-// count++;
|
|
|
-// }
|
|
|
-//
|
|
|
-// typedef Eigen::Triplet<double> T;
|
|
|
-// std::vector<T> triplets;
|
|
|
-// triplets.reserve(C_triplets.rows());
|
|
|
-//
|
|
|
-// for(unsigned i=0; i<C_triplets.rows(); ++i)
|
|
|
-// triplets.push_back(T(C_triplets(i,0),C_triplets(i,1),C_triplets(i,2)));
|
|
|
-// SparseMatrix<Scalar> C(A.rows()*B.rows(),A.cols()*B.cols());
|
|
|
-// C.setFromTriplets(triplets.begin(),triplets.end());
|
|
|
-//
|
|
|
-// return C;
|
|
|
-//}
|
|
|
-//
|
|
|
-//#ifdef IGL_STATIC_LIBRARY
|
|
|
-//// Explicit template specialization
|
|
|
-//// generated by autoexplicit.sh
|
|
|
-//template Eigen::SparseMatrix<double, 0, int> igl::kronecker_product<double>(Eigen::SparseMatrix<double, 0, int> const&, Eigen::SparseMatrix<double, 0, int> const&);
|
|
|
-//#endif
|