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