1

我需要估计在循环中创建的几个圆圈的 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);
} 

我认为潜在的问题是我在哪里进行“分配”但不确定。

4

0 回答 0