47 outer_size > 2,
"Outer size must be greater than 2.");
49 inner_size > 2,
"Inner size must be greater than 2.");
51 using scalar_type =
typename Matrix::value_type;
52 using storage_index_type =
typename Matrix::StorageIndex;
56 (outer_size - 1) * inner_size + outer_size * (inner_size - 1);
58 std::vector<Eigen::Triplet<scalar_type, storage_index_type>> triplets;
60 (outer_size - 1) * inner_size;
66 triplets.emplace_back(
67 row, o * inner_size + i + 1,
static_cast<scalar_type
>(1));
68 triplets.emplace_back(row, (o + 1) * inner_size + i + 1,
69 static_cast<scalar_type
>(-1));
72 triplets.emplace_back(row,
73 col_offset_for_inner_difference + (o + 1) * (inner_size - 1) +
75 static_cast<scalar_type
>(1));
76 triplets.emplace_back(row,
77 col_offset_for_inner_difference + (o + 1) * (inner_size - 1) +
79 static_cast<scalar_type
>(-1));
83 Matrix matrix(rows, cols);
84 matrix.setFromTriplets(triplets.begin(), triplets.end());
104 outer_size > 1,
"Outer size must be greater than 1.");
106 inner_size > 1,
"Inner size must be greater than 1.");
108 using scalar_type =
typename Matrix::value_type;
109 using storage_index_type =
typename Matrix::StorageIndex;
113 (outer_size - 1) * inner_size + outer_size * (inner_size - 1);
116 std::vector<Eigen::Triplet<scalar_type, storage_index_type>> triplets;
120 triplets.emplace_back(
121 row, o * inner_size + i,
static_cast<scalar_type
>(1));
122 triplets.emplace_back(
123 row, (o + 1) * inner_size + i,
static_cast<scalar_type
>(-1));
129 (outer_size - 1) * inner_size;
133 triplets.emplace_back(row,
134 col_offset_for_inner_difference + o * (inner_size - 1) + i,
135 static_cast<scalar_type
>(1));
136 triplets.emplace_back(row,
137 col_offset_for_inner_difference + o * (inner_size - 1) + i + 1,
138 static_cast<scalar_type
>(-1));
142 Matrix matrix(rows, cols);
143 matrix.setFromTriplets(triplets.begin(), triplets.end());