c# - 缩放绘制的曲线

标签 c# math drawing gdi+

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

相关文章:

java - 我如何获得天花板号码(等: 5 to 10)

javascript - 如何使用 Kinetic js/html5 为弧形设置动画,以便 "snake"变长?

c# - 在没有关键条件表达式的情况下在 DynamoDb 中查询

c# - 禁用打印对话框弹出

java - 本应为正数的负数输出

math - 来自 32 位自动递增 INTEGER 的伪随机数

c - 在绘图区绘制图像

iphone - 如何为 iPhone 应用程序制作铅笔笔触?

c# - 如何仅使用一个 Controller 动态检索表?

c# - 监视 Windows 应用程序的(网络)资源利用率和性能