2

私は数学関数スケッチャープログラムに取り組んでいます。関数はユーザーによって入力され、プログラムは関数を解析して曲線を描画します。sin(x)など、範囲間隔が小さい関数がいくつかあるという問題に直面していcos(x)ます[-1 : 1]。対照的に、他のいくつかの関数は のように間隔が非常に大きいe^xため、非常に速く成長します。X 軸の値を使用して関数で評価し、Y アクセス値を生成しています。X 軸の値は通常、-40 から 40 の間で固定されています。ただし、Y の値が非常に大きい関数もあれば、Y の値が非常に小さい関数もあるため、X アクセスのように Y アクセス セットの固定値に依存することはできません。

乗算\除算アプローチで曲線をズームしようとしましたが、一般的な関数でうまく機能しました。たとえば、sin(x)によってズームされていsin(x) * 3ます。しかし、一部の関数は倍率を掛けてもズームアップせず、むしろ関数自体が変化することがわかりました。例はf(x) = sin(log(cosh(sec(-x))))です。

関数曲線をズーム アウト\インして、Y アクセスの最大値、最小値、増分ステップ値を調整し、もちろん最大\最小 Y 値に達するように曲線をズームする方法を見つけたいと考えています。 . どんな数学\プログラミングのアイデアでも構いません。ありがとう

用途:System.Drawing.Graphics.DrawCurve(Pen pen, PointF[] curve)

4

1 に答える 1

3

変換マトリックスは私にとってはうまく機能します。あなたはそれを試して見ることができます:

// Zoom transformation on the Graphics object
float zoomFactor = 1.5f;
Matrix mat = new Matrix();
mat.Scale(zoomFactor, zoomFactor, MatrixOrder.Append); //zoom to 150%
myGraphics.Transform = mat;
// Now draw your points...

ノート:

この種の操作 (ズームインとズームアウト) は、モデルではなくビューで実行する必要があると強く信じています。ズーム操作は、グラフィックス オブジェクト、または画面と呼ばれるもので実行する必要があります。モデルを変更しているため、私の頭の中でレンダリングしている方法を変更することはきれいではありません。したがって、別の数学関数を描画します。

于 2012-07-01T14:42:52.513 に答える