ページ 11

二重ループ

Posted: 2010年12月30日(木) 22:26
by falco
SetPixelを使って(99,0)(99,99)(0,99)の三角形をかくために

コード:

 SetPixel(hdc,99,0,RGB(0,0,0));
		
	SetPixel(hdc,99,1,RGB(0,0,0));
	SetPixel(hdc,98,1,RGB(0,0,0));
		
	SetPixel(hdc,99,2,RGB(0,0,0));
	SetPixel(hdc,98,2,RGB(0,0,0));
	SetPixel(hdc,97,2,RGB(0,0,0));

	SetPixel(hdc,99,3,RGB(0,0,0));
	SetPixel(hdc,98,3,RGB(0,0,0));
	SetPixel(hdc,97,3,RGB(0,0,0));
	SetPixel(hdc,96,3,RGB(0,0,0));
               :
これをループ処理しようとして

コード:

int     x,y;
        for(y=0; y<100; y++)
        {   for(x=99; x>=y; x--)
            {
                SetPixel(hdc,x,y,RGB(0,0,0));
            }
        }
としたのですがうまくいきません。間違いをおしえてください。

Re: 二重ループ

Posted: 2010年12月31日(金) 05:26
by bitter_fox
falco さんが書きました:SetPixelを使って(99,0)(99,99)(0,99)の三角形をかくために

コード:

 SetPixel(hdc,99,0,RGB(0,0,0));
		
	SetPixel(hdc,99,1,RGB(0,0,0));
	SetPixel(hdc,98,1,RGB(0,0,0));
		
	SetPixel(hdc,99,2,RGB(0,0,0));
	SetPixel(hdc,98,2,RGB(0,0,0));
	SetPixel(hdc,97,2,RGB(0,0,0));

	SetPixel(hdc,99,3,RGB(0,0,0));
	SetPixel(hdc,98,3,RGB(0,0,0));
	SetPixel(hdc,97,3,RGB(0,0,0));
	SetPixel(hdc,96,3,RGB(0,0,0));
               :
これを細かく見ると、
y = 0のときは
一回、点を打つ
y = 1のときは
二回、点を打つ
y = 2のときは
三回、点を打つ

それをy = 99まで繰り返すので、

コード:

	for (y = 0; y <= 99; y++)
	{
		for (x = 0; x <= y; x++)
		{
			//
		}
	}
このようになりますね。

さらに、
y = 0の時のX座標の集合は
X = {99}
(x = 0)

y = 1の時のX座標の集合は
X = {99, 98}
(x = 0, 1)

y = 2の時のX座標の集合は
X = {99, 98, 97}
(x = 0, 1, 2)

となり、
個々のxについてみると、
x = 0の時
X = 99

x = 1の時
X = 98

x = 2の時
X = 97

となって、コードで表すと以下のようになります。

コード:

	for (y = 0; y <= 99; y++)
	{
		for (x = 0; x <= y; x++)
		{
			SetPixel(hdc, 99 - x, y, RGB(0, 0, 0));
		}
	}
[hr][修正]
RGB(255, 255, 255) ==> RBG(0, 0, 0)

Re: 二重ループ

Posted: 2010年12月31日(金) 14:17
by falco
なるほど。わかりやすい説明ありがとうございました。