缩放绘制的曲线

时间:2012-07-01 14:15:35

标签: c# math drawing gdi+

我正在研究数学函数草绘程序。用户正在输入函数,程序会解析它们并绘制它们的曲线。我遇到的问题是,有些函数的范围间隔较小,例如sin(x)cos(x)只有[-1 : 1]间隔。相比之下,其他一些函数的间隔非常大,例如e^x,因此它们的成长速度非常快。我正在使用X轴值来评估函数以产生Y访问值。 X轴值通常固定在-40到40.但是,我不能依赖于X访问等Y访问集的固定值,因为某些函数具有非常大的Y值,而另一些函数具有非常小的值。

我尝试使用乘法\除法进行缩放曲线,并且它与常用函数一起工作正常。例如,sin(x)正在缩放sin(x) * 3。但是,我发现有些函数在乘以因子时不会放大,而是函数本身会发生变化。一个例子是f(x) = sin(log(cosh(sec(-x))))

我想找到一种方法来缩放功能曲线,以便我可以调整它们的Y访问最大,最小和增量步长值,并且当然,缩放曲线使其达到最大\ minmum Y值。任何数学\编程理念都可以。感谢

使用:System.Drawing.Graphics.DrawCurve(Pen pen, PointF[] curve)

1 个答案:

答案 0 :(得分:3)

转换矩阵对我来说很好。你可以尝试看看:

// Zoom transformation on the Graphics object
float zoomFactor = 1.5f;
Matrix mat = new Matrix();
mat.Scale(zoomFactor, zoomFactor, MatrixOrder.Append); //zoom to 150%
myGraphics.Transform = mat;
// Now draw your points...

注意:

我坚信应该在视图上执行这种操作(放大和缩小),而不是模型。应该在图形对象上执行缩放操作,或者像其他人一样调用它,即屏幕。当你改变模型时,改变你在脑海中渲染的方法并不干净,因此绘制了不同的数学函数。