ページ 11

WinAPI32で、3次元グラフを作る

Posted: 2010年8月10日(火) 18:23
by HK
何度かお世話になっておりますHKと申します。

WINAPIで以下のサイトにあるような3次元グラフを書くことが目的です。
http://homepage3.nifty.com/ishidate/vcp ... p05_23.htm

現在の進行状況ですが以下のようになってます。
視点(θ、φ)を変更するスクロールバーを作成。
実空間での3次元座標から、画面出力に用いる2次元座標にする関数の作成。
それを用いてXYZ軸を描画。
次に、x,y座標をforループで細かく指定していき、z座標を得る。
z座標を描画

という感じです。

問題点は、ある矩形領域にだけ、点が描画されないということです。

画像を添付しているので、ごらんください。画面の右半分が描画されていません。
(なぜか線は描写される)

一応、原因を調べようとして、青点を横一線になるように打点したところ、
右の端っこに青点が描画されているのは確認できました。これもなぜだかわかりません

打点する関数は以下のようになっています。
void graph_dots(HWND hWnd){
int i;
   //X軸、Y軸方向を細かくスキャンし、打点していく
for(xx=1;xx>=-1;xx-=0.02){
        for(yy=-1;yy<=1;yy+=0.02){
         //理論空間→実際の空間
         x=xx*size;
         y=yy*size;
         //関数の計算
         z=func(x,y);
         //実際の空間→理論空間
         zz=z/size;
         //打点する
         point=ChangeTo2D(x,y,z);
         SetPixelV(hdc,point.x,point.y,RGB(0,(y>0? 255:0),0));

      }
}
//----------テスト
for(i=0;i<800;i+=3) SetPixel(hdc,i,100,RGB(0,0,255));
//----------
}

ちなみに 3次元グラフは以下
double func(double x, double y){
return 40*cos(pow(((x*x+y*y)/50.0),0.5)); 
}
Windows Vista
VC++2008
を使っております

Re:WinAPI32で、3次元グラフを作る

Posted: 2010年8月10日(火) 21:58
by HK
自己解決しました

Vista で Aero を OFF にすると SetPixel系 がうまく動かないそうです

こんなので1日悩んでいた自分がばかばかしい。そして時間の無駄だった。

ところで、確かこのまえ2000ポイントくらい溜まってたのですが
またぴよぴよに戻ったのはIP変動のせいですか?

Re:WinAPI32で、3次元グラフを作る

Posted: 2010年8月10日(火) 22:03
by シエル
たぶんポイントは名前だけしか見てないと思いますよ。

名前間違ってませんか?
大文字だったり小文字だったり、スペース入ってたりとかないですかね?

Re:WinAPI32で、3次元グラフを作る

Posted: 2010年8月10日(火) 22:04
by fatens
名前の全角・半角の違いではないでしょうか。

Re:WinAPI32で、3次元グラフを作る

Posted: 2010年8月10日(火) 22:05
by パコネコ
昇進状態というので名前の確認できますよ…

Re:WinAPI32で、3次元グラフを作る

Posted: 2010年8月10日(火) 22:06
by シエル
どうやら以前までは全角だったようですね。

追記:
いつの間にか熟練のプログラマーに。。
まだ初級者レベルなんだけどなぁ。 画像

Re:WinAPI32で、3次元グラフを作る

Posted: 2010年8月10日(火) 22:13
by HK
test

Re:WinAPI32で、3次元グラフを作る

Posted: 2010年8月10日(火) 22:14
by HK
本当ですね。
ありがとうございました。

Re:WinAPI32で、3次元グラフを作る

Posted: 2010年8月11日(水) 01:36
by ISLe
修正プログラムを入手することができます。
ただしWindowsUpdateでの公開(一般公開)はされていないようです。

Vista SP1
http://support.microsoft.com/kb/983184/ja
Vista SP2
http://support.microsoft.com/kb/978545/ja