2011-07-22 12 views
2

新しいジオメトリライブラリをブースト1.47で使用して遊んで、2D極座標システムを定義できるかどうかを知りたがっていました。ヘッダファイルやドキュメントで 私は極座標システムの定義を見つけましたが、私はコンパイルエラーを取得しています以下のサンプルコードでそれを使用しようとすると:VC2010でブーストジオメトリ:2D極座標システムを使用

using namespace boost; 

typedef geometry::cs::polar<geometry::radian> geometry_type; 
typedef geometry::model::point<double, 2, geometry_type> point_type; 

const double PI = math::constants::pi<double>(); 

point_type p1(0, 0); 
point_type p2(1, PI/2); 

double dist = geometry::distance(p1, p2); // COMPILATION FAILS HERE 

私が取得:「エラーC2039: 'を型 ':上記の距離関数をコンパイルしようとすると' boost :: geometry :: traits :: cs_tag 'のメンバーではありません。

これは、ブーストヘッダファイル(ブースト/幾何学/コア/ cs.hpp)から抽出された極座標システムの定義です:

/*! 
\brief Polar coordinate system 
\details Defines the polar coordinate system "in which each point 
    on a plane is determined by an angle and a distance" 
\see http://en.wikipedia.org/wiki/Polar_coordinates 
\ingroup cs 
*/ 
template<typename DegreeOrRadian> 
struct polar 
{ 
    typedef DegreeOrRadian units; 
}; 

しかし、私は「極性」であるため、定義が不完全であることを考えますどこにも言及されていない。私は単純な2D極座標システムのために、自分自身で距離戦略やその他の必要な特性を定義することになっていますか?

答えて

3

さて、研究のもう少し後に自分の質問(これはOKであることを希望を)答え:私が得たようですジオメトリライブラリの意味での座標系に関する誤った考え。異なる座標系は、例えば2つの点間の距離がデカルトで計算されない球の表面のような固有の幾何学を特定するように見える。 極座標をとり、X座標とY座標に変換する新しいポイントクラスを定義することで、私が達成したい(極座標系を使用する)ことができます。ブーストサンプルのようにBOOST_GEOMETRY_REGISTER_POINT_2Dマクロに新しいポイントクラスを登録し、通常のデカルトシステムを使用すると、すべてのジオメトリアルゴリズムが期待通りに機能します。

+0

編集:私はこの問題について他の回答を得ていないので自分の答えを受け入れました – floyd73

1

タイプ特性の問題は、各クライアントタイプごとに独自の専門分野を作成する必要があることです。

(これはC++ 0xの標準<traits>ライブラリの真のではありません。)

+0

2次元極座標系のような単純なものが、ジェネリックジオメトリライブラリにデフォルトで含まれることが期待されます。極座標系の定義がヘッダーにあるので、それを含めることでしたが、それはまだ不完全です。 – floyd73

関連する問題