ホーム ] アプリ ] コントロール ] クラスライブラリ ]

上へ
コンポーネント開発
グリッドコントロール
レギュラープレーヤ
数学関数表示コントロール

数学関数表示コントロール(SimpleCurve)

目次

最終更新日:2007/05/15  新規

●概要

 任意の数学関数を与えると、その関数のグラフを自動描画する。導関数、不定積分関数が存在すればそれも表示できる。

●特徴

  • 関数を数学的に記号解析するのではなく、全て、曲線としてグラフィカル処理で行う。従って、非解析関数の描画もできる。
  • エンドユーザが自分の目で確認しながら表示条件を変更(インタラクティブ処理)できることを念頭にしている。変数範囲、関数値範囲、スケーリングは自由に変更できる。
  • 関数値の範囲は基本、自動決定され表示される。
  • 関数は、コードあるいは文字列式で定義し、コールバック関数で与えており自由度が高い。
  • 陽関数、陰関数、媒介変数関数が可能。
  • 座標系は、デカルト座標または極座標である。
  • 関数の特異点を検出し、破綻せずに表示できる。不定値、無限大、垂直接線など。
  • 導関数(1次)、不定積分関数も描画できる。導関数や不定積分を表示する場合は、それらを含めた全ての関数値域が最適になるように自動調整される。

●技術解説

関数引継ぎ

 このコントロールにグラフとして描画する原始関数をどう与えるかである。

陰関数の高速描画

 従来Tipsで紹介していた方法は、時間が掛かり、ユーザのインタラクティブな処理に対応できない。今回、これを高速化したので紹介する。

陰関数の高速描画U

 関数を文字式で与えた場合、関数の演算に時間が掛かる(コードのコールバックの数十倍以上)ので、まともに描画すると、時間が掛かりすぎる。

○曲線描画

 目的は描画であるので、描画するオブジェクトの必要解像度以上に演算しても無駄となる。例えば、画面上の描画では、横は、高々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としてしまうと、無限大などの不連続点が連続してしまい、不自然となる。従って、連続する曲線群の集まりとして処理する。例えば、無限大〜無限大を一つの曲線として描画するなどである。

曲線解析

 問題となるのは、特異点の扱いである。不定、無限大、垂直接線などを検出、予測し、グラフ上に表す。

導関数/不定積分関数

 文字式を微分して導関数を求めるのではなく、微分の原理を用いて数値演算で求め、それをグラフ化する。積分も同じ。

描画領域

 コントロールは指定された条件で表示する。またコントロールサイズは任意であるので、サイズにリアルタイムに応答する必要がある。