вычисление точки пересечения двух прямых с собственным - PullRequest
0 голосов
/ 08 июня 2018

Сегодня я сделал свои первые шаги в eigen и нашел следующее решение для получения точки пересечения:

#include <Eigen/Dense>
using namespace Eigen;
using namespace std;

int main() {
    // Calc intersection of line ac with bd:
    Vector2f a(8,2);
    Vector2f b(9,5);
    Vector2f c(6,6);
    Vector2f d(5,9);

    Matrix2f xx; 
    xx << c-a, b-d; 

    cout << "Here is the matrix xx:\n" << xx << endl;
    Vector2f x = xx.colPivHouseholderQr().solve(b-a);
    Vector2f intersect1( a + x(0)* ( c-a ) );
    Vector2f intersect2( b + x(1)* ( d-b ) );

    cout << "intersect1\n" << intersect1 << std::endl;
    cout << "intersect2\n" << intersect2 << std::endl;
}

Q: Есть ли в eigen функция, которая дает мне непосредственно результат пересечения?Я полагаю, что я сделал много кода вручную.

1 Ответ

0 голосов
/ 08 июня 2018

Линия в двух измерениях такая же, как Гиперплоскость в двух измерениях.И для этого случая есть метод intersection:

#include <Eigen/Geometry>
#include <iostream>
int main() {
    typedef Eigen::Hyperplane<float,2> Line2;
    typedef Eigen::Vector2f Vec2;
    Vec2 a(8,2), b(9,5), c(6,6), d(5,9);

    Line2 ac = Line2::Through(a,c), bd=Line2::Through(b,d);

    std::cout << "Intersection:\n" << ac.intersection(bd) << '\n';
}

Результат [4, 10], как и ваш код.

...