我发现如果没有Rcpp 及其相关软件包为不同对象类型之间的转换提供的 nice<as>
和命令,我会迷失方向。<wrap>
我有一个点矩阵,其中的行代表二维笛卡尔空间中的点:
pointsMatrix <- matrix(runif(100,-1,1),50,50)
然后我想使用boost geometry 中的convex_hull 算法来找到点的凸包。
但是,我不确定如何将其转换为可以理解NumericMatrix
的数据类型之一。convex_hull
此外,我不确定如何将 Boost Geometry 的输出转换回 Rcpp 可以交回给 R 的东西。
#include <Rcpp.h>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/polygon.hpp>
using namespace Rcpp;
BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
// [[Rcpp::export]]
NumericMatrix convexHullRcpp(NumericMatrix pointsMatrix){
typedef boost::tuple<double, double> point;
typedef boost::geometry::model::polygon<point> polygon;
// Some sort of conversion of pointsMatrix here to pointsMatrixBG//
polygon hull;
boost::geometry::convex_hull(pointsMatrixBG, hull);
//Now to convert hull into something that Rcpp can hand back to R.//
return hullToR;
}
看起来 boost.tuple 可能是最好的选择