Visualization Tool Kit(VTK)など

幾何計算アルゴリズムを提供する。
各種アルゴリズムはテンプレートによる実装のため、
自作クラスでもアダプターを作れば対応可能である。
  • distance: 2つのGeometryの距離。
  • intersects: 1つあるいは2つのGeometryの交差判定
  • intersection:2つのGeometryの交差判定と交差部分のGeometryの出力
  • envelop: bounding boxの計算

などがある。その他の関数は作者のドキュメントを参照。

アダプター

下記のようなoperator()で要素にアクセスするPointクラスをGeometryのアルゴリズムで使えるようにする。
class Point3D
{
public:
  Point3D();
  double& operator()(size_t i);
  const double& operator()(size_t i) const;
private:
  std::array<double, 3> data;
}

namespace boost { namespace geometry { namespace traits {

template<> struct tag<Point3D> { typedef point_tag type; };
template<> struct coordinate_type<Point3D> { tyepdef double type; };
template<> struct coordinate_system<Point3D> { typedef cs::cartesian type; };
template<> struct dimension<Point3D> : boost::mpl::int_<2> {};
template<> struct access<Point3D, 0> 
{
  static double get(Point3D const p) { return p(0); }
  static double set(Point3D& p, const double value) { p(0) = value; }
};
template<> struct access<Point3D, 1> 
{
  static double get(Point3D const p) { return p(1); }
  static double set(Point3D& p, const double value) { p(1) = value; }
};
template<> struct access<Point3D, 2> 
{
  static double get(Point3D const p) { return p(2); }
  static double set(Point3D& p, const double value) { p(2) = value; }
};
}}}

以上により、boost::geometryの各種関数に対してPoint3Dを使用することができる。

Point3D p1(0,0,0);
Point3D p2(0,0,10);
Point3D p3(0,10,0);
std::cout << boost::geometry::distance(p1, p2) << std::endl;

boost::geometry::model::segment<Point3D> s(p1, p2);
std::cout << boost::geometry::distance(p3, s) << std::endl;

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニュー

チュートリアル

アルゴリズム(数学)

並列計算

STL

#include<memory> #include<string> #include<sstream> #include<algorithm> #include<functional> #include<numeric>

Media Foundation

【メニュー編集】
Wiki記法ガイド

メンバーのみ編集できます