我正在尝试一个函数,它将找到给定X个边和半径r的多边形的所有顶点。我的总体目标是制作一个圆圈,但由于你只能绘制直线,我必须制作一个多边形。所以所有的多边形都将以点(0,0)为中心。我想找到6边和半径的多边形的所有坐标,它将从.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坐标和y坐标)粘贴在verticies数组中。
答案 0 :(得分:1)
有什么建议吗?
常规平面2D多边形上两点之间的角距离为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] );
}
}
我在这里通过引用传递向量,以避免在进入/离开函数范围时出现深拷贝。
答案 1 :(得分:1)
我会将Point vertices[nVerticies] = {};
带出循环(for
之前)。我还会将verticies
更正为vertices
。此外,数学函数sin
和cos
通常以弧度为单位,而不是度数。最后,角度增量不能是常数,而是依赖于({反})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;
}
答案 2 :(得分:0)
如果您希望顶点是静态数组并初始化它,请将'nVertices'声明为宏或const int。
const int nVertices = 6;