グラフを描く準備をします。
"MyApp.h" です。
次のようにしてグラフを描くことにします。 青い部分を見てください。
// // MyApp.h // #include <math.h> class MyApp : public MyMainWnd{ public: // WM_PAINT void wmPaint(HDC hdc){ // メモリデバイス MyMemoryDC mdc(hdc, 600, 400); MyDC g(mdc.hdc); // 座標変換 g.Trans(50, 0, 0, -50, mdc.width / 2, mdc.height / 2); // 座標変換 // 座標軸-------------------------------------------------------- g.Pen.Color(0, 0, 255); // 青色のペン // x軸 g.MoveTo(-10, 0); g.LineTo(10, 0); // y軸 g.MoveTo(0, -10); g.LineTo(0, 10); // 曲線を描く g.Pen.Color(0, 0, 0);// 黒色のペン g.Pen.Size(2); // 曲線の定義域 double min = -10; double max = 10; double t; // 変数用意 t = min; g.MoveTo(t, t * t); while(t < max){ t = t + 0.1; g.LineTo(t, t * t); } //================================================================= // スクリーン画面へコピー mdc.BitBlt(10, 10); } };
実行画面です。
曲線を描く方法は、曲線上の点を線で結んでいくだけです。 では、ざっと説明します。
ここでは、放物線、y = x^2 のグラフを描いています。 ですから、x = t、y = t * t とします。
ですから、ここを変更すれば色んなグラフが描けます。
次は、t の範囲を与えます。 ここでは、-10 から 10 としています。
// 曲線の定義域 double min = -10; double max = 10; double t; // 変数用意
この範囲でグラフを描いていきます。 t は、0.1 ずつ増やして点をずらしていきます。 そして、線で結んでいきます。
t = min; g.MoveTo(t, t * t); while(t < max){ t = t + 0.1; g.LineTo(t, t * t); }
さて、座標変換をしている所を見ます。 点 (1, 0) は (50, 0) へ、点 (0, 1) は (0, -50) へ移ります。 ですから、50ドットが1となります。 また、y軸は上に向かっています。 さらに、原点は画面の真ん中に移動しています。
// 座標変換 g.Trans(50, 0, 0, -50, mdc.width / 2, mdc.height / 2); // 座標変換
次は、、x軸、y軸を描いている部分です。 適当に、-10 と 10 の範囲で直線を描いています。
// x軸 g.MoveTo(-10, 0); g.LineTo(10, 0); // y軸 g.MoveTo(0, -10); g.LineTo(0, 10);
さて、これらは、メモリデバイスに描いています。 これは、メインウィンドウのクライアント領域の1部に描いていることになります。
// メモリデバイス MyMemoryDC mdc(hdc, 600, 400);
// スクリーン画面へコピー mdc.BitBlt(10, 10);
次回は、グラフを描くために、クラスを作ってみます。