-2

X 辺の数と半径 r が与えられた多角形のすべての頂点を見つける関数を試しています。私の全体的な目標は円を作成することですが、直線しか描画できないため、多角形を作成する必要があります。したがって、すべてのポリゴンは点 (0,0) を中心に配置されます。そして、.1 から 1.0 まで反復する 6 つの側面と半径を持つ多角形のすべての座標を見つけたいと考えています。これにより、互いに 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 ループの私の目標は、指定された半径の 1 つのポリゴンのすべての座標を取得し、それらを 2 次元のポイント (x 座標と y 座標) として頂点配列に貼り付けることです。

4

3 に答える 3

1

何かアドバイスはありますか?

正平面 2D 多角形上の 2 点間の角距離は、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 に答える
0

頂点を静的配列にして初期化する場合は、「nVertices」をマクロまたは const int として宣言します。

const int nVertices = 6;

于 2013-08-28T23:33:52.957 に答える