PDFファイル

MyGraph コンポーネント
1. はじめに
DrawGraph(int Ndata,float *XData,
float *YData);
グラフを曲線で描く
PlotGraph(int NData,float *XData,
float *YData,int mark,int size);
グラフを記号で描く
Clear(TColor color);
イメージ領域を消去(
イメージ領域を消去
(クリア
クリア)
)する
Copy(void);
クリップボードへコピーする。
従来のCでは、
グラフを描くための基本関数をライブラ
リに登録しておいて、
これをリンクすることによって、
簡
単に描くことができた。しかし、
単に描くことができた。
しかし、
C++Builderでは、
C++Builder
では、
グラ
フを描くための領域、
すなわち、
オブジェクトの名前が一
定しないので、
個々にプログラムが必要となり、
いった
ん作成したグラフ描画の手続きも、
プログラムが変われ
ば、
それを再利用するために多くの変更・修正を要し、
極めて面倒な作業を避けることはできない。
しかし、
C++Builderでは、
C++Builder
では、
どのプログラムからも利用
できるような手続きをコンポーネントとして登録できるように
3.プロパティ
3.
プロパティ
なっている。そこで、
なっている。
そこで、
グラフを描くためのコンポーネント
3.1 OriginX,OriginY
を作成したが、
これを、
コンパイラに登録すれば、
フォー
グラフ枠の原点(左下隅)の位置を与える。
ム上にこのコンポーネントを配置して、
そのプロパティを
既定値は OriginX=30, OriginY=270
設定し、
コンポーネントに用意した手続き、
すなわち、
メ
ソッドを利用するだけで容易にグラフを描くことができるよ
3.2 WidthX,HeightY
グラフ横軸および縦軸の長さを与える。グラフの大き
グラフ横軸および縦軸の長さを与える。
グラフの大き
さを決める。
うにした。
既定値は WidthX=HeightY=220
3.3 NgridX,NgridY
2.MyGraph コンポーネント
このコンポーネントは、
TMyGraphのクラスとして作成
TMyGraph
のクラスとして作成
されており、名前を特に指定しなければ、MyGraph1,
MyGraph2, ...というものになる。
...というものになる。このクラスは、
このクラスは、
TImage
横軸および縦軸に表す升目の数を与える。
既定値は NGridX=NGridY=4
3.4 LinearX,LinearY
をもとに作成した
(派生した)
もので、
TImageのプロパ
TImage
のプロパ
横軸および縦軸目盛りの形式。bool
横軸および縦軸目盛りの形式。
bool型のデータで与
型のデータで与
ティをすべて持ち、
グラフ作成用に次のプロパティを用意
え、true
え、
true の場合は線形目盛り、
の場合は線形目盛り、false
false の場合は対数目
した。
盛となる。
既定値は LinearX=LinearY=true
既定値は LinearX=LinearY=true
グラフ原点位置
グラフ枠サイズ
升目の数
グラフ目盛りの型
目盛り下限値
目盛り公差・
目盛り公差
・公比
補助目盛り線
補助目盛り分割数
グラフ軸タイトル
上書きするかどうか
縦軸目盛りを左に
WidthX
HeightY
OriginX,OriginY
WidthX, HeigtY
NGridX, NGridY
LinearX,LinearY
SValueX,SValueY
VValueX,VValueY
SubAxis
SubX, SubY
TitleX, TitleY
OverWrite
LeftScale
メソッドとして、
XScaleUnit(int NData,float *XData);
横軸目盛りの設定
YScaleUnit(int NData,float *YData);
縦軸目盛りの設定
DrawWaku(void);
グラフ枠を描く
(OriginX,OriginY)
- 13 -
3.5 SValueX,SValueY,VValueX,VValueY
float *x,*y;
.........nd,xデータ配列
.........nd,x
データ配列,y
,y データ配列
......... を用意する
MyGraph1->YScaleUnit(nd,y);
MyGraph1->DrawWaku();
MyGraph1->DrawGraph(nd,x,y);
S- は目盛りの初期値、
は目盛りの初期値、VV- は線形目盛りの場合は公
差、対数目盛の場合は公比を表す。
対数目盛の場合は公比を表す。対数目盛の場合、
対数目盛の場合、
初期値は正の値でなければならない。対数目盛では、
初期値は正の値でなければならない。
対数目盛では、
公比を10
公比を
10とするのが普通である。
とするのが普通である。
3.6 SubAxis
グラフ升目の中に補助目盛り線を点線で描くかどうか
を決める。
4.1 XScaleUnit, YScaleUnit
YScaleUnit は、
は、yy 軸データを表す、
軸データを表す、要素数が
要素数が NData
の float 型配列データ YData を与えて、
既定値は SubAxis=true
既定値は SubAxis=true
SValueY,VValueYを決定する。
SValueY,VValueY
を決定する。線形グラフの場合は、
線形グラフの場合は、
falseであっても、
false
であっても、
軸線上に補助目盛り線を描く。
正負の領域にまたがってもよいが、
対数目盛の場合は
3.7 SubX,SubY
補助目盛り線の11升に対する分割数。
補助目盛り線の
升に対する分割数。線形目盛りの
線形目盛りの
場合にのみ有効で、対数目盛の場合はつねに
対数目盛の場合はつねに55分割さ
れる。00を与えれば補助目盛りを描かない。
れる。
正領域のデータに限られる。
XScaleUnit は、
は、xx 軸データに対応するものである。
4.2 DrawWaku
まず表示領域をクリアして、
グラフの目盛り枠を描く。
3.8 TitleX,TitleY
枠および目盛り線の色
(黒)
と太さは固定で変更するこ
縦横軸につけるタイトル文字を指定する。
とはできない。グラフを描く前に必ず実行しなければなら
とはできない。
グラフを描く前に必ず実行しなければなら
3.9 OverWrite
グラフ枠を描くときに、
現在の枠を消去するかどうかを
決める。規定値は
決める。
規定値は false で枠を消去する。
ない。
4.3 DrawGraph
データ個数 NDa
NData
ta と x 軸および y 軸の float 型配列
3.10 LeftScale
縦軸目盛りを左側に付けるときはtrue
縦軸目盛りを左側に付けるときは
true、
、
右側に付け
るときはfalse
るときは
falseとする。
とする。規定値は
規定値はtrue
trueである。
である。OverWrite
OverWrite
= trueと併用して、
trueと併用して、
左右で異なった軸の目盛りを付けるこ
データ XData および YData を与えて曲線グラフを描
く。曲線の色および線の太さは
く。
曲線の色および線の太さは、
、枠を描いた後で、
そ
のプロパティをDrawGraph
のプロパティを
DrawGraphを
を実行
実行する
する前に設定する。
前に設定する。
MyGraph1->Canvas->Pen->Color=clRed;
MyGraph1->Canvas->Pen->Width=2;
MyGraph1->DrawGraph(nd,x,y);
とができる。
4. 使い方
4.4 PlotGraph
このコンポーネントは,
TImageクラスから派生したも
TImage
クラスから派生したも
記号で点をプロットする。記号は、
記号で点をプロットする。
記号は、
次の文字で指定
のであり、
イメージコンポーネントの機能をすべて含み、 する。サイズには
する。サイズには 2 ∼ 4 程度の値を指定する。
さらに,
グラフを描くための機能を追加したものである。
mkCircle
円、○
円、
○
MyGraphコンポーネントのすべてのプロパティは、
MyGraph
コンポーネントのすべてのプロパティは、
オブ
mkSquare
mkDiamond
mkAngle
mkPlus
mkCross
ジェクトインスペクタに表示される。
プロパティの規定値を用いて作成されるグラフは前
ページの図のようになる。これは、
ページの図のようになる。
これは、TMyGraph
TMyGraph のメ
ソッドの一つである DrawWaku を用いて描いたもの
である。
して内部を塗りつぶすことができる。
4.5 Clear
4. メソッド
4.
メソッド
グラフを描く領域は Image コンポーネントの場合
と同じであるが、
グラフの大きさや位置はプロパティ
に設定する。一般にグラフの
に設定する。
一般にグラフのxx軸のデータ範囲は既知
であることが多いのに対して、yy 軸のデータはその
であることが多いのに対して、
データがグラフ内に納まるように、
適切な目盛りを設
定するのが普通である。そこで、
定するのが普通である。
そこで、y 軸データについて
目盛りを決定する関数 YScaleUnit を用意している。
一般的には、
以下の手続きでグラフを描くことができ
int
nd;
記号の色は Canvas->Pen->Color を設定する。
○および□◇では、Canvas->Brush->Color
○および□◇では、
Canvas->Brush->Color を設定
MyGraph1->DrawWaku();
る。
四角、□
四角、□
四角、◇
四角、
◇
三角、△
三角、
△
+
×
グラフ領域を消去する。指定した色で領域内をクリア
グラフ領域を消去する。
指定した色で領域内をクリア
する。これは、
する。
これは、
グラフを消去してそこに別のグラフィック
を描くような場合に使用する。別のグラフを描く場合は
を描くような場合に使用する。
別のグラフを描く場合は
DrawWaku を実行すればよい。
4.5 Copy
グラフ領域をクリップボードへコピーし、
別のアプ
リケーションで張り付けることができる。
4.6 DoubleToFloat
MyGraphコンポーネントのデータは
MyGraph
コンポーネントのデータはfloat
float型を対象
型を対象
としており、double
としており、
double 型データについては、
型データについては、これを表
これを表
示することはできない。そこで、
示することはできない。
そこで、
double型配列を
double
型配列をfloat
float
- 14 -
型配列に変換する関数を用意した。
2. グラフ領域の大きさと位置を定め、原点位置、グ
ラフの大きさ、目盛りのグリッド数、縦横軸のタ
void DoubleToFloat(float *flt,
double *dbl,int nd);
イトルをプロパティに設定する。
この関数はクラスに属さないグローバル関数として
定義しているので、
どのクラスからも使用することが
3. 表示するデータ配列を用意する。
4.目盛りの付け方を定める。
4.
目盛りの付け方を定める。
これを自動的に行うに
できる。
は、XScaleUnit
は、
XScaleUnit あるいは YScaleUnit で決めるこ
ともできる。
5. 使い方
5. DrawWakuでグラフ枠を描く。
DrawWaku でグラフ枠を描く。
1. コンポーネントパレットから MyGraph コンポー
ネントをフォーム上に配置する。
6. ペン、ブラシの色を決める。
7. DrawGraph
(または PlotGraph)
(またはPlotGraph
)
でグラフを描く。
例題
上図に示す各ボタンに、
次のような機能を持たせ、
グラフを描くプログラムを作成しなさい。
Graph
グラフ領域11にグラフを描く。
グラフ領域
x = 0,1,2, L,20 に対して、●のグラフは
△のグラフは
y = 1 5 0 - 3 0x + 2x 2
y = 300-30 x + x2
○でないことに注意。
Clear
グラフを消去する。グラフ領域をクリアする。
グラフを消去する。
グラフ領域をクリアする。
Draw
グラフ領域 1 の左上隅から右下隅へ、また、右上隅から左下隅へ対角線を引く。
Copy
クリップボードにコピーする。
MyGraph2
Colorの
Color
のRadioGroup
RadioGroupの中から選んだ色で、
の中から選んだ色で、
このボタンの下に作成したグラフ領域22 を
このボタンの下に作成したグラフ領域
クリアする。
Close
プログラムを閉じる。
- 15 -
- 16 -