我正在尝试计算多边形的坐标,编码出来并不是一个真正的问题,它只是我的数学很糟糕但是慢慢学习。
我需要根据中心点和半径计算坐标。例如centerX = 40,centerY = 40,radius = 8,sides = 5,i = n 0 - 5
这是我到目前为止所拥有的。 int x,y; int sides = 5; int angle = 0;
{{1}}
当我在在线生成器上绘制点时,这确实给了我一个漂亮的多边形(有点)。
然而,它稍微旋转,我不知道如何解决这个问题,理想情况下我想在底部有一条扁线。
所以我的问题是:
谢谢你的帮助。
答案 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。