我需要估计在循环中创建的几个圆圈的 boost::polygon 的投影面积。
这个想法是对于给定的 x 和 y 质心,创建一个多边形,使用n个顶点绘制一个给定半径的圆。该圆存储在“polygon_90_set_data”中。这些圆圈可能会或不会在它们之间重叠。这在一个循环中重复多次,以创建所有感兴趣的圆圈(> 2 米尔)。我需要估计所有圆圈投影的面积,类似于所附的数字。
但是,当我尝试在我的代码中获取投影面积时,我只得到一个圆圈的面积,而不是全部。这可能是解散或合并的问题,但不确定如何操作。你可以帮帮我吗?到目前为止,这是我的代码。
#include <vector>
#include <boost/polygon/polygon.hpp>
#include "draw_circle_rcpp.h"
namespace bpl = boost::polygon;
typedef bpl::polygon_90_data<double> Polygon;
typedef bpl::polygon_traits<Polygon>::point_type Point;
typedef bpl::polygon_90_set_data<double> PolygonSet;
using namespace boost::polygon::operators;
double displayed_area_rcpp(arma::mat spheres, int nvertices = 10L) {
const std::size_t n_shperes = spheres.n_rows;
// Create a polygon
PolygonSet da;
for (int i = 0; i < n_shperes; i++) {
// Create a polygon
Polygon polygon;
double X = spheres(i, 0);
double Y = spheres(i, 1);
double radius = spheres(i, 2);
//Create the circle vertices
arma::mat circle_sphere = draw_circle_rcpp(X, Y, radius, nvertices);
// Create points
std::vector<Point> points;
for (int j = 0; j < nvertices; ++j) {
double xx = circle_sphere(j, 0);
double yy = circle_sphere(j, 1);
points.push_back(Point(xx, yy));
}
// Points to polygon
polygon.set(points.begin(),points.end());
assign(da, polygon);
}
return bpl::area(da);
}
我认为潜在的问题是我在哪里进行“分配”但不确定。