WinAPI32で、3次元グラフを作る
Posted: 2010年8月10日(火) 18:23
何度かお世話になっておりますHKと申します。
WINAPIで以下のサイトにあるような3次元グラフを書くことが目的です。
http://homepage3.nifty.com/ishidate/vcp ... p05_23.htm
現在の進行状況ですが以下のようになってます。
視点(θ、φ)を変更するスクロールバーを作成。
実空間での3次元座標から、画面出力に用いる2次元座標にする関数の作成。
それを用いてXYZ軸を描画。
次に、x,y座標をforループで細かく指定していき、z座標を得る。
z座標を描画
という感じです。
問題点は、ある矩形領域にだけ、点が描画されないということです。
画像を添付しているので、ごらんください。画面の右半分が描画されていません。
(なぜか線は描写される)
一応、原因を調べようとして、青点を横一線になるように打点したところ、
右の端っこに青点が描画されているのは確認できました。これもなぜだかわかりません
打点する関数は以下のようになっています。
VC++2008
を使っております
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 VistaVC++2008
を使っております
