Добрый день!
Использую две библиотеки в проекте — 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 это в операциях над векторами.
Здравствуйте, 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 это в операциях над векторами.
Думаю, смысла не будет. Вот
тут в примере экспортится структура, у которой ничего не перегружено. Видимо, они используют собственные операции. Да там и операции, мне кажется, несколько специфичные, вряд ли только линейная алгебра.
Здравствуйте, Went, Вы писали:
W>Да там и операции, мне кажется, несколько специфичные, вряд ли только линейная алгебра.
Там определённо есть операции которые могли бы быть вычислены через Eigen. Например
вот эта.
Но, как видишь, Boost.Geometry сама итерирует компоненты точек. Поэтому чтобы полноценно адаптировать Eigen придётся специализировать все подобные алгоритмы, и привязываться к этому internal api.