|
●概要 任意の数学関数を与えると、その関数のグラフを自動描画する。導関数、不定積分関数が存在すればそれも表示できる。 ●特徴
●技術解説 このコントロールにグラフとして描画する原始関数をどう与えるかである。 従来Tipsで紹介していた方法は、時間が掛かり、ユーザのインタラクティブな処理に対応できない。今回、これを高速化したので紹介する。 関数を文字式で与えた場合、関数の演算に時間が掛かる(コードのコールバックの数十倍以上)ので、まともに描画すると、時間が掛かりすぎる。 ○曲線描画 目的は描画であるので、描画するオブジェクトの必要解像度以上に演算しても無駄となる。例えば、画面上の描画では、横は、高々1000ピクセル前後なので、変数は、最大、最小間を1000程度で分割して求めるのが効率が良い。 dX = (XMax - XMin)/1000 Xi = XMin + i * dX ( i = 0 to 1000) Yi = f(Xi) などとする。 印刷であれば、A4横で、300dpi で印刷するとすれば、297/25.4 * 300 = 3500 と、3500程度で分割することになる。但し、陰関数、媒介変数関数では、分割数は決定できない。 無限大などがあるので、曲線としては一般的には描けない。例えば、単純に(X,Y)点集合を結んで、DrawLinesとしてしまうと、無限大などの不連続点が連続してしまい、不自然となる。従って、連続する曲線群の集まりとして処理する。例えば、無限大〜無限大を一つの曲線として描画するなどである。 ○曲線解析 問題となるのは、特異点の扱いである。不定、無限大、垂直接線などを検出、予測し、グラフ上に表す。 文字式を微分して導関数を求めるのではなく、微分の原理を用いて数値演算で求め、それをグラフ化する。積分も同じ。 ○描画領域 コントロールは指定された条件で表示する。またコントロールサイズは任意であるので、サイズにリアルタイムに応答する必要がある。
|