Как реализовать графический редактор на C #

Итак, я пишу графический калькулятор. Пока у меня есть полуфункциональный график, однако мне трудно найти хороший баланс между точными графиками и гладкими кривыми.

Текущая реализация (полу-псевдокод) выглядит примерно так:

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

Проблема в том, что при каждом целочисленном значении добавляется только точка, графики искажаются, когда их поворотные точки не попадают в целые числа (например, sin (x) ^ 2 ).

alt text

Я пробовал увеличить i на что-то меньшее (например, 0,1) , который работает, но график выглядит очень грубо.

alt text

Я использую C # и GDI +. У меня SmoothingMethod установлено на AntiAlias, так что проблема не в этом, как видно из первого графика. Есть ли какие-то проблемы с рисованием кривых с большим количеством точек? Может быть, точки должны быть расположены точно на пикселях?

Я уверен, что некоторые из вас уже работали над чем-то очень похожим, так что есть предложения? Пока вы занимаетесь этим, есть ли у вас какие-нибудь предложения по графическому изображению функций с асимптотами? например, 1 / x ^ 2

PS Я не ищу библиотеку, которая все это делает - я хочу написать ее сам.

5
задан ian93 15 January 2011 в 13:36
поделиться