-2

我正在尝试一个函数,该函数将在给定 X 边数和半径 r 的情况下找到多边形的所有顶点。我的总体目标是画一个圆圈,但因为你只能画直线,所以我必须画一个多边形。所以所有的多边形都将以点 (0,0) 为中心。我想找到一个多边形的所有坐标,它有 6 条边和半径,将从 0.1 迭代到 1.0。这应该在彼此内部形成一个 10 个圆圈。这是我到目前为止所拥有的:

这是我的错误:

52:33: error: variable-sized object ‘vertices’ may not be initialized
57:17: error: request for member ‘insert’ in ‘vertices’, which is of non-class type ‘iPoint [(((long unsigned int)(((long int)nVertices) + -0x00000000000000001)) + 1)]’

我对 for 循环的目标是获取给定半径的单个多边形的所有坐标,并将它们作为二维点(x 坐标和 ay 坐标)粘贴到顶点数组中。

4

3 回答 3

1

有什么建议吗?

规则平面二维多边形上两点之间的角距离为2pi / N

因评论而更新

我会稍微不同地写它。

 #include <math.h> // for M_PI

 void circle_points(
     double const radius,
     int const n_points,
     std::vector<Point<double>> &out_points )
 {
     out_points.resize(n_points);

     double const angular_distance = M_PI / (double)n_points;
     for( int i = 0; i < n_points; i++ ) {
          double const x = radius * sin(i * angular_distance);
          double const y = radius * cos(i * angular_distance);
          out_points[i] = Point<double>(x,y);
     }
 }
 
 void concentric_circles(
     double const radius_start,
     double const radius_end,
     int const n_circles,
     int const n_points_per_circle,
     std::vector<std::vector<Point<double>> &out_circles )
 {
     out_circles.resize(n_circles);
     double const radius_increment = (radius_end - radius_start) / n_circles;
     for( int i = 0; i < n_circles; i++ ) {
         circle_points(
             radius_start + radius_increment*i,
             n_points_per_circle,
             out_circles[i] );
     }
 }

我在这里通过引用传递向量,以避免在进入/离开函数范围时进行深度复制。

于 2013-08-28T22:58:16.073 回答
1

我会Point vertices[nVerticies] = {};退出循环(在 之前for)。我还会更正verticies. vertices此外,数学函数通常以弧度sincos不是度数工作。最后,角度增量不能是恒定的,而是取决于(反向)nVertices

综上所述:

double radius = 0.1;
int nVertices = 6;
double angle = pi()*2/nVertices ;
while(radius <= 1.0)
{
     iPoint vertices[nVertices];
     for (int i = 0; i < nVertices; i++)
     {
          double x = 0 + radius * sin(i * angle);
          double y = 0 + radius * cos(i * angle);
          vertices[i]= iPoint(x,y) ;
     }
     radius = radius + 0.1;
}
于 2013-08-28T22:59:03.010 回答
0

如果您希望顶点为静态数组并对其进行初始化,请将“nVertices”声明为宏或 const int。

const int nVertices = 6;

于 2013-08-28T23:33:52.957 回答