画面にピクセルを手動で描画してグラフィックスを作成するのではなく、狂気があります。
使用したいのはDirectXまたはOpenGLのいずれかです。私はあなたがグーグルを開いて読んで行くことを提案します、そこに読むべきことがたくさんあります。
ライブラリをダウンロードしたら、確認するサンプルプロジェクトがたくさんあり、それらを使用して開始できます。
この時点で2つのアプローチがあります。非常に多数の辺を持つ形状を表すベクトルを数学的に計算する方法があります(つまり、円のように見えます)。または、アルファチャネルを使用して円のテクスチャ(つまり画像)を画面に描画して、残りのテクスチャを透明にする「不正行為」方法があります。(不正行為の方法は、柔軟性は劣りますが、コーディングが簡単で、実行が速く、より良い結果が得られます)。
数学的に行いたい場合は、これらのライブラリの両方で画面に線を引くことができるため、個々のピクセルではなく、各線の始点と終点の観点からアプローチを開始する必要があります。つまり、ベクターグラフィックが必要です。
現在、重い計算を行うことはできませんが、ベクトルアプローチは次のようになります(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;
}
上記のコードでは、円の外側を移動して、外側の周りに個々の線を1つずつ描画します。始点とオフセットがある各線について、オフセットをある角度だけ回転させます(この角度は円の周りを移動するにつれて増加します)。次に、始点からオフセット点まで線を引きます。次の反復を開始する前に、開始点をオフセット点に移動して、次の行が最後の行の終わりから開始するようにします。
それが理解できることを願っています。