5

だから私はグラフ電卓を書いて​​います。これまでのところ、私は半機能的なグラファーを持っていますが、正確なグラフと滑らかな曲線のバランスを取るのに苦労しています。

現在の実装 (半疑似コード) は次のようになります。

for (float i = GraphXMin; i <= GraphXMax; i++)
{
    PointF P = new PointF(i, EvaluateFunction(Function, i)
    ListOfPoints.Add(P)
}
Graphics.DrawCurve(ListOfPoints)

これに関する問題は、すべての整数値にポイントを追加するだけであるため、転換点が整数に収まらない場合にグラフが歪んでしまうことです (例: sin(x)^2 )。

代替テキスト

iを小さい値 (0.1 など)ずつ増やしてみましたが、うまくいきましたが、グラフは非常に粗く見えます。

代替テキスト

C# と GDI+ を使用しています。最初のグラフからわかるように、SmoothingMethod を AntiAlias に設定しているので、それは問題ではありません。たくさんの点で曲線を描くと何か問題がありますか? ポイントはおそらくピクセル上に正確に配置する必要がありますか?

以前に非常によく似たものに取り組んだことがある人もいると思いますので、何か提案はありますか? あなたがそれに取り組んでいる間、漸近線で関数をグラフ化するための提案はありますか? 例: 1/x^2

PS私はこれをすべて行うライブラリを探しているわけではありません-自分で書きたいです。

4

2 に答える 2

2

問題を解決しました。描画プロセスのどこかで、float ではなく int を使用していました。

于 2011-02-11T21:02:10.010 に答える
2

グラフをレンダリングするとき、ビットマップは離散的でグラフはそうではないため、常に丸め誤差が生じます。

対処方法はいくつかあります。

  1. アンチエイリアシングを使用します。グラフをより滑らかに見せるだけです。
  2. 非線形補間を使用します。直線補間を使用して点 a から点 b に描画すると、角度が生じます。各ポイントでグラフの傾き (線分ではありません!) を計算し、傾きを補間法 (バイキュービックまたはベジエ曲線) にフィードします。

WPF や Silverlight などのベクター API を使用すると、実装が容易になる場合があります。

漸近線を処理するのはかなり難しいです。最初にそれらを見つけてから値をスキップして、グラフに「穴」を作る必要があります。

于 2011-01-15T13:33:35.067 に答える