我正在开发一个数学函数草图程序。用户输入函数,程序解析它们并绘制它们的曲线。我面临的问题是,有些函数的范围间隔很小,例如 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轴访问最大、最小和增量步长值,当然,缩放曲线使其达到最大\最小Y 值。任何数学\编程想法都可以。谢谢
使用:System.Drawing.Graphics.DrawCurve(Pen pen, PointF[] curve)
最佳答案
转换矩阵对我来说效果很好。你可以尝试一下,看看:
// 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...
注意:
我坚信这种操作(放大和缩小)应该在 View 上执行,而不是在模型上执行。缩放操作应该在图形对象或其他人所说的屏幕上执行。在我看来,更改您正在渲染的方法并不干净,因为您正在更改模型,因此绘制了不同的数学函数。
关于c# - 缩放绘制的曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11282682/