Я хочу представить 2D-фигуру таким образом, чтобы с ней можно было взаимодействовать, как если бы это был вектор точек, в частности, я хочу иметь возможность вызывать операторы []
и at()
для нее и возвращатьссылки на вещи, которые действуют как 2D точки.В настоящее время я просто использую класс, чья единственная переменная-член является вектором точек и имеет различные арифметические и геометрические операции, определенные точечно над его элементами.
Однако в других частях моего кода мне нужно обрабатывать вектор из n точек как элемент 2n-мерного пространства и выполнять над ним базовую линейную алгебру (например, проецируя вектор на данное подпространство в R ^ 2n).).В настоящее время я создаю объект Eigen::VectorXd
каждый раз, когда хочу это сделать, а затем выполняю обратное преобразование после выполнения этих операций.Я не хочу этого делать, так как я делаю преобразование достаточно часто, чтобы все копирование было заметным источником неэффективности.
Если бы я хранил данные в виде плоского массива типа doubles / float / ints,Я мог бы привести указатель на его n-й элемент к указателю на Point (члены которого были бы просто парой двойных / чисел с плавающей запятой / ints).Однако, поскольку я не знаю внутреннего представления, которое Eigen использует для векторов (и оно вполне может измениться), это невозможно.
Есть ли разумный способ решить это?Я мог бы просто использовать Eigen::Vector
везде, но я действительно хочу, чтобы большая часть кода могла притворяться, что он имеет дело с набором точек.