C# 缩放绘制的曲线

C# 缩放绘制的曲线,c#,math,drawing,gdi+,C#,Math,Drawing,Gdi+,我正在做一个数学函数绘制程序。用户正在输入函数,程序将解析这些函数并绘制它们的曲线。我面临的问题是,有些函数的范围间隔很小,例如sin(x),cos(x),它们只有[-1:1]间隔。相比之下,其他一些函数的间隔非常大,例如e^x,因此它们的增长速度非常快。我使用X轴值在函数中求值以生成Y轴访问值。X轴值通常固定在-40到40之间。但是,我不能像X-access那样依赖于Y-access集的固定值,因为有些函数的Y值非常大,而有些函数的Y值非常小 我尝试过用乘法\除法来缩放曲线,它在普通函数中工作

我正在做一个数学函数绘制程序。用户正在输入函数,程序将解析这些函数并绘制它们的曲线。我面临的问题是,有些函数的范围间隔很小,例如
sin(x)
cos(x)
,它们只有
[-1:1]
间隔。相比之下,其他一些函数的间隔非常大,例如
e^x
,因此它们的增长速度非常快。我使用X轴值在函数中求值以生成Y轴访问值。X轴值通常固定在-40到40之间。但是,我不能像X-access那样依赖于Y-access集的固定值,因为有些函数的Y值非常大,而有些函数的Y值非常小

我尝试过用乘法\除法来缩放曲线,它在普通函数中工作得很好。例如,
sin(x)
正被
sin(x)*3
缩放。但是,我发现有些函数在乘以因子时不会放大,而是函数本身会发生变化。例如
f(x)=sin(log(cosh(sec(-x)))

我想找到一种方法来缩小函数曲线,这样我可以调整它们的Y-access最大值、最小值和增量步长值,当然,也可以缩放曲线,使其达到最大值。任何数学\编程的想法都可以。谢谢


用法:
System.Drawing.Graphics.DrawCurve(钢笔,PointF[]曲线)

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

// 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...
注意:


我坚信这种操作(放大和缩小)应该在视图上执行,而不是在模型上执行。缩放操作应该在图形对象上执行,或者其他人称之为屏幕。当你改变模型时,改变你在我脑海中呈现的方法是不干净的,因此画了一个不同的数学函数。

f(x)=a*sin(log(cosh(sec(-x)))
缩放对我来说很好。函数是如何变化的?试着将它与几个因素相乘。该函数不可缩放。