使用半径和中心点计算多边形的坐标

时间:2016-03-15 22:39:51

标签: math geometry polygon

我正在尝试计算多边形的坐标,编码出来并不是一个真正的问题,它只是我的数学很糟糕但是慢慢学习。

我需要根据中心点和半径计算坐标。例如centerX = 40,centerY = 40,radius = 8,sides = 5,i = n 0 - 5

这是我到目前为止所拥有的。     int x,y;     int sides = 5;     int angle = 0;

{{1}}

当我在在线生成器上绘制点时,这确实给了我一个漂亮的多边形(有点)。

enter image description here

然而,它稍微旋转,我不知道如何解决这个问题,理想情况下我想在底部有一条扁线。

所以我的问题是:

  1. 我的x / y公式是否正确?可以改进吗?
  2. 如何添加旋转?例如20度
  3. 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

旋转是一种矩阵运算。在2D中,[[cos(a), - sin(a)],[sin(a),cos(a)]]应用于每个点(x,y),就像这样(我不知道你的语言):

 xnew= cos(a)* x - sin(a)* y; 
 ynew= sin(a)* x + cos(a)* y; 

参见例如维基百科上的Rotation_(mathematics)#Two_dimensions。 请注意,角度a以弧度为单位,因此如果您的输入为度数,则可能需要乘以pi/180

答案 1 :(得分:0)

假设您使用C ++进行编码,我想您正在寻找的是这样的:

for (size_t i = 0; i < sides; i++)
{
    double angle = M_PI / 2 + 2 * M_PI * i / sides;
    int x = round(centerX + radius * cos(angle));
    int y = round(centerY + radius * sin(angle));
    points.push_back(point(x, y));
}

即使您选择使用整数来表示x,y坐标,最好使用double作为弧度的角度。我只是将Pi / 2添加到你的公式中,以便逆时针旋转90度poligon。