Traits для Eigen для Boost.Geometry
От: GhostCoders Россия  
Дата: 27.10.15 05:33
Оценка:
Добрый день!

Использую две библиотеки в проекте — Eigen и Boost.Geometry.
Eigen хорош тем, что держит SSE2 и прочее. Читал только положительные отзывы.

Boost.Geometry необходим для расчетов пересекаются ли две геометрии, входит ли точка в геометрию и т.д.

Так я понял, к Boost.Geometry можно прикрутить любой класс для работы с точками\векторами,
достаточно реализовать traits.

Немного про traits в boost.Geometry:
http://www.boost.org/doc/libs/1_57_0/libs/geometry/doc/html/geometry/design.html

Там только достаточно реализовать get:
namespace traits
{
    template <>
    struct access<mypoint, 0>
    {
        static double get(mypoint const& p)
        {
            return p.x;
        }
    };
    // same for 1: p.y
    ...
}
?

И вообще будет ли смысл от использования точек Eigen в Boost.Geometry, если Boost.Geometry использует вектора просто как обычные структуры?
Ведь смысл SSE2 это в операциях над векторами.
Третий Рим должен пасть!
Re: Traits для Eigen для Boost.Geometry
От: Went  
Дата: 27.10.15 07:35
Оценка: 2 (1) +1
Здравствуйте, GhostCoders, Вы писали:

GC>Там только достаточно реализовать get...

Я использую макрос:
BOOST_GEOMETRY_REGISTER_POINT_2D(md::Vector2F, md::Float, boost::geometry::cs::cartesian, x, y);
BOOST_GEOMETRY_REGISTER_RING(md::Points2F);

(в пространстве md мои типы, экспортируемые в буст).

GC>И вообще будет ли смысл от использования точек Eigen в Boost.Geometry, если Boost.Geometry использует вектора просто как обычные структуры?

GC>Ведь смысл SSE2 это в операциях над векторами.
Думаю, смысла не будет. Вот тут в примере экспортится структура, у которой ничего не перегружено. Видимо, они используют собственные операции. Да там и операции, мне кажется, несколько специфичные, вряд ли только линейная алгебра.
Re[2]: Traits для Eigen для Boost.Geometry
От: Evgeny.Panasyuk Россия  
Дата: 28.10.15 19:57
Оценка:
Здравствуйте, Went, Вы писали:

W>Да там и операции, мне кажется, несколько специфичные, вряд ли только линейная алгебра.


Там определённо есть операции которые могли бы быть вычислены через Eigen. Например вот эта.
Но, как видишь, Boost.Geometry сама итерирует компоненты точек. Поэтому чтобы полноценно адаптировать Eigen придётся специализировать все подобные алгоритмы, и привязываться к этому internal api.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.