2

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

我试图用乘法\除法来缩放曲线,它在常用函数上运行良好。例如,sin(x)正在放大sin(x) * 3. 但是,我发现某些函数在乘以一个因子时不会放大,而是函数本身会发生变化。一个例子是f(x) = sin(log(cosh(sec(-x))))

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

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

4

1 回答 1

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...

笔记:

我坚信这种操作(放大和缩小)应该在视图上执行,而不是在模型上。缩放操作应该在图形对象或其他人所说的屏幕上执行。更改您在我脑海中呈现的方法并不干净,因为您正在更改模型,因此绘制了不同的数学函数。

于 2012-07-01T14:42:52.513 回答