我正在研究数学函数草绘程序。用户正在输入函数,程序会解析它们并绘制它们的曲线。我遇到的问题是,有些函数的范围间隔较小,例如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)
答案 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...
注意:强>
我坚信应该在视图上执行这种操作(放大和缩小),而不是模型。应该在图形对象上执行缩放操作,或者像其他人一样调用它,即屏幕。当你改变模型时,改变你在脑海中渲染的方法并不干净,因此绘制了不同的数学函数。