我需要在给定 2 个点(他的顶点的中心和 1 个顶点)的情况下绘制一个“n”边的多边形,只是我在数学上很烂。我读了很多书,所有这些都是我能够理解的(我不知道它是否正确):
好的,我用毕达哥拉斯定理取两点(半径)之间的距离:
sqrt(pow(abs(x - xc), 2) + pow(abs(y - yc), 2));
以及这2点与atan2之间的角度,如下所示:
atan2(abs(y - yc), abs(x - xc));
其中 xc, yc 是中心点,x, y 是唯一知道的顶点。
有了这些数据,我会:
void polygon(int xc, int yc, int radius, double angle, int sides)
{
int i;
double ang = 360/sides; //Every vertex is about "ang" degrees from each other
radian = 180/M_PI;
int points_x[7]; //Here i store the calculated vertexs
int points_y[7]; //Here i store the calculated vertexs
/*Here i calculate the vertexs of the polygon*/
for(i=0; i<sides; i++)
{
points_x[i] = xc + ceil(radius * cos(angle/radian));
points_y[i] = yc + ceil(radius * sin(angle/radian));
angle = angle+ang;
}
/*Here i draw the polygon with the know vertexs just calculated*/
for(i=0; i<sides-1; i++)
line(points_x[i], points_y[i], points_x[i+1], points_y[i+1]);
line(points_y[i], points_x[i], points_x[0], points_y[0]);
}
问题是程序不能正常工作,因为它绘制的线条不像多边形。
有人怎么知道足够的数学来帮忙?我正在使用 C 和 turbo C 在这个图形基元中工作。
编辑:我不想填充多边形,只需绘制它。