2

我在玩 boost 1.47 中提供的新几何库,想知道是否可以定义 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

在VC2010中我得到:“错误C2039:'type':不是'boost::geometry::traits::cs_tag'的成员”尝试编译上面的距离函数时。

这是从 boost 头文件 (boost/geometry/core/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 极坐标系统自己定义一个距离策略和其他需要的特征?

4

2 回答 2

3

好吧,经过更多研究后回答我自己的问题(希望这没问题):似乎我对几何库意义上的坐标系有错误的想法。不同的坐标系似乎指定了固有几何形状,例如球体的表面,例如,两点之间的距离不是以笛卡尔方式计算的。我想要完成的(使用极坐标系统)可以通过定义一个新的点类来完成,该类采用极坐标并将它们转换为 X 和 Y 坐标。在使用 BOOST_GEOMETRY_REGISTER_POINT_2D 宏(如在 boost 示例中)注册新点类并使用普通笛卡尔系统后,所有几何算法都按预期工作。

于 2011-07-25T15:25:58.990 回答
1

类型特征的问题是您必须为每种客户端类型编写自己的专业化。

(这不适<traits>用于 C++0x 中的标准库。)

于 2011-07-22T11:20:23.747 回答