Итак, я пишу графический калькулятор. Пока у меня есть полуфункциональный график, однако мне трудно найти хороший баланс между точными графиками и гладкими кривыми.
Текущая реализация (полу-псевдокод) выглядит примерно так:
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 Я не ищу библиотеку, которая все это делает - я хочу написать ее сам.