Смещение полилинии по константе - PullRequest
0 голосов
/ 23 мая 2018

У меня есть ломаная линия, которую мне нужно сместить на константу.Вообразите ломаную линию, представляющую центральную линию шоссе, мне нужно сместить / параллельно этой центральной линии 50 единиц (слева и -50 единиц (справа), чтобы создать полосы.

Какую функцию я могу использоватьвыполнить это смещение / параллельное преобразование? Я считаю, что я должен использовать MatrixXd или ArrayXd для хранения точек ломаной линии? Но, возможно, есть лучший объект для их хранения? Должен ли я использовать метод transpose() для достижениямоя параллельная операция? Обратите внимание, что точки ломаной линии 2d, а не 3d.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Вы должны вычислить первую производную (касательную) для каждой точки вашей полилинии.Только тогда любой параллельный сдвиг относительно этой касательной в определенной точке имеет смысл.

0 голосов
/ 23 мая 2018

Это действительно зависит от того, что еще вы собираетесь делать с очками.Вы также можете использовать Matrix2Xd или MatrixX2d, если хотите ограничить количество строк / столбцов.Я не знаю, как влияет на ломаную линию, но если вы просто хотите добавить постоянный вектор к каждой точке, вы можете добавить строку или столбец:

#include <iostream>
#include <Eigen/Core>

using namespace Eigen;

int main()
{
    MatrixXd mat(5, 2);
    VectorXd vec(2);
    vec << 10., 20;
    mat.setRandom();
    std::cout << mat << "\n\n";
    mat.rowwise() += vec.transpose();
    std::cout << mat << "\n\n";
    return 0;
}
...