如何在C#中实现grapher

ian*_*n93 5 c# math graphics gdi+ calculator

所以我正在写一个图形计算器.到目前为止,我有一个半功能的图示器,但是,我很难在精确的图形和平滑的曲线之间取得良好的平衡.

当前的实现(半伪代码)看起来像这样:

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

这个问题是因为它只在每个整数值上加一个点,当它们的转折点不落在整数上时,图形最终会失真(例如sin(x)^ 2).

替代文字

我尝试用更小的东西(比如0.1)递增i,这有效,但图形看起来非常粗糙.

替代文字

我正在使用C#和GDI +.我将SmoothingMethod设置为AntiAlias,因此从第一张图中可以看出,这不是问题所在.绘制曲线有很多点是否存在某种问题?这些点应该准确定位在像素上吗?

我相信你们中有些人以前做过非常相似的事情,所以有什么建议吗?当你在这里时,你对使用渐近线绘制函数有什么建议吗?例如1/x ^ 2

PS我不是在寻找能够做到这一切的图书馆 - 我想自己写一下.

ian*_*n93 3

好的,我解决了问题。在绘图过程中的某个地方我使用了 int 而不是 float。