我有一些用户定义的属性,然后我想用它们自动生成一个正多边形。属性是中心x,中心y,半径和顶点数。我想知道如何计算正多边形的所有顶点的x和y坐标。我已经尝试过进行Calculate coordinates of a regular polygon's vertices讨论了。但它总是给我错误的坐标。我目前的代码如下(C ++):
#define DOUBLE(a) ((a)*(a))
...
if(radius <= 0 || vertices < 3)
return NULL;
Polygon* poly = new Polygon;
double angle = DOUBLE(M_PI) / vertices;
for(long i = 0; i < vertices; i++)
{
double a = (angle * i);
poly->add(centerX + radius * cos(a), centerY + radius * sin(a));
}
return poly;
答案 0 :(得分:8)
角度计算出现错误。
每个顶点之间的角度应为2 * M_PI / vertices
。
显然是你的宏:
#define DOUBLE(a) ((a)*(a))
不正确。
然而,在C ++中,你真的不应该使用宏进行这样的微不足道的操作 - 它最多应该是内联函数,或者只是上面给出的直接公式。
答案 1 :(得分:1)
尝试
#define DOUBLE(a) ((a) + (a))
或
#define DOUBLE(a) (2 * (a))
您正在以虚假身份定义SQUARE(a)。