您不会通过手动将像素绘制到屏幕上来绘制图形,那是疯狂的所在。
您要使用的是 DirectX 或 OpenGL。我建议你打开谷歌去阅读,那里有很多要读的东西。
一旦你下载了这些库,就会有很多示例项目可供查看,它们会让你入门。
此时有两种方法:有一种计算向量的数学方法,该向量描述了具有大量边的形状(即,它看起来像一个圆)。或者有一种“作弊”方法,即使用 alpha 通道在屏幕上绘制一个圆形的纹理(即图片),以使纹理的其余部分透明。(作弊方法更容易编码,执行速度更快,并且产生更好的结果,尽管它不太灵活)。
如果您想以数学方式进行,那么这两个库都允许您在屏幕上画线,因此您需要从每条线的起点和终点的角度开始您的方法,而不是单个像素。我,你想要矢量图形。
我现在无法进行繁重的数学运算,但是向量方法可能看起来有点像这样(sudo-code):
in-param: num_of_sides, length_of_side;
float angle = 360 / num_of_sides;
float start_x = 0;
float start_y = 0;
x = startX;
y = startX;
for(int i(0); i < num_of_sides; ++i)
{
float endX, endY;
rotateOffsetByAngle(x, y, x + lenth_of_side, y, angle * i, endX, endY);
drawline(x, y, endX, endY);
x = endX;
y = endY;
}
drawline(float startX, startY, endX, endY)
{
//does code that draws line between the start and end coordinates;
}
rotateOffsetByAngle(float startX, startY, endX, endY, angle, &outX, &outY)
{
//the in-parameters startX, startY and endX, endY describe a line
//we treat this line as the offset from the starting point
//do code that rotates this line around the point startX, startY, by the angle.
//after this rotation is done endX and endY are now at the same
//distance from startX and startY that they were, but rotated.
outX = endX;
outY = endY; //pass these new coordinates back out by reference;
}
在上面的代码中,我们绕着圆的外侧移动,将每条线逐一地画在外侧。对于每条线,我们都有一个起点和一个偏移量,然后我们将偏移量旋转一个角度(这个角度随着我们绕圆移动而增加)。然后我们绘制从起点到偏移点的线。在开始下一次迭代之前,我们将起点移动到偏移点,以便下一行从最后一行的末尾开始。
我希望这是可以理解的。