gpt4 book ai didi

c# - 缩放绘制的曲线

转载 作者:行者123 更新时间:2023-11-30 22:27:25 25 4
gpt4 key购买 nike

我正在开发一个数学函数草图程序。用户正在输入函数,程序会解析它们并绘制它们的曲线。我面临的问题是,有些函数的区间间隔很小,例如 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com