107 const auto&
U = map.linear_part();
108 const auto&
t = map.translation();
122 const auto P = (
r *
r) * (
U *
U_T);
167 linalg::Matrix<T, 3 * N + 1, 2 * N> A;
168 linalg::Vector<T, 3 * N + 1> b;
171 const auto [
U_inv, event] = linalg::MatrixInverse<decltype(U)>()(
U);
172 static_cast<void>(event);
174 for (std::size_t
i = 1;
i < 2 *
N + 1; ++
i) {
175 const std::size_t idx = (
i - 1) %
N;
180 const auto I = linalg::make_identity<T, N>();
182 for (std::size_t
i = 0;
i <
N; ++
i) A(0,
N +
i) =
T(1);
184 A = linalg::set_block<1, N + 1, 0, N>(A,
T(-1) *
U_inv);
185 A = linalg::set_block<1, N + 1, N, 2 * N>(A,
T(-1) *
I);
187 A = linalg::set_block<N + 1, 2 * N + 1, 0, N>(A,
U_inv);
188 A = linalg::set_block<N + 1, 2 * N + 1, N, 2 * N>(A,
T(-1) *
I);
190 A = linalg::set_block<2 * N + 1, 3 * N + 1, N, 2 * N>(A,
T(-1) *
I);
192 using Dom = linalg::Matrix<T, 1, 2 * N>;
193 using Codom = linalg::Matrix<T, 1, 3 * N + 1>;
219 linalg::Matrix<T, 2 * N, N> A;
220 linalg::Vector<T, 2 * N> b;
222 const auto [
U_inv, event] = linalg::MatrixInverse<decltype(U)>()(
U);
223 static_cast<void>(event);
225 for (std::size_t
i = 0;
i < 2 *
N; ++
i) {
226 const auto idx =
i %
N;
231 A = linalg::set_block<0, N, 0, N>(A,
U_inv);
232 A = linalg::set_block<N, 2 * N, 0, N>(A,
T(-1) *
U_inv);
234 using Dom = linalg::Matrix<T, 1, N>;
235 using Codom = linalg::Matrix<T, 1, 2 * N>;
271 linalg::mat_cols_v<
decltype(
child_coord.linear_part())>;
273 "Convex set domain does not equal the child coordinate "
274 "linear map's codomain in size");
276 const auto I = linalg::make_identity<T, N>();
278 linalg::Matrix<T, N + 1, N>
F;
279 F = linalg::set_block<0, N, 0, N>(
F,
I);
280 linalg::Vector<T, N + 1>
g;
281 for (std::size_t
i = 0;
i <
N; ++
i)
g(
i) =
T(-1) *
c(
i);
283 const auto map = affine::AffineMap<decltype(F)>(
F,
g);
285 const auto cones = std::make_tuple(
soc);
291 linalg::Matrix<T, 2 * N, N>
F;
292 F = linalg::set_block<0, N, 0, N>(
F,
I);
293 F = linalg::set_block<N, 2 * N, 0, N>(
F,
T(-1) *
I);
295 linalg::Vector<T, 2 * N>
g;
296 for (std::size_t
i = 0;
i <
N; ++
i)
g(
i) =
T(-1) *
c(
i) +
r;
297 for (std::size_t
i =
N,
j = 0;
i < 2 *
N; ++
i, ++
j)
g(
i) =
c(
j) +
r;
298 const auto map = affine::AffineMap<decltype(F)>(
F,
g);
300 const auto cones = std::make_tuple(
rplus,
rplus);
306 linalg::Matrix<T, 3 * N + 1, 2 * N>
F;
307 F = linalg::set_block<0, N, 0, N>(
F,
I);
308 F = linalg::set_block<N, 2 * N, 0, N>(
F,
T(-1) *
I);
309 F = linalg::set_block<0, N, N, 2 * N>(
F,
I);
310 F = linalg::set_block<N, 2 * N, N, 2 * N>(
F,
I);
311 for (std::size_t
i = 0;
i <
N; ++
i)
F(2 *
N,
N +
i) =
T(-1);
312 F = linalg::set_block<2 * N + 1, 3 * N + 1, N, 2 * N>(
F,
I);
313 linalg::Vector<T, 3 * N + 1>
g;
314 for (std::size_t
i = 0;
i <
N; ++
i)
g(
i) =
T(-1) *
c(
i);
315 for (std::size_t
i =
N,
j = 0;
i < 2 *
N; ++
i, ++
j)
g(
i) =
c(
j);
317 const auto map = affine::AffineMap<decltype(F)>(
F,
g);