是否存在一个变换矩阵可以对x轴和/或y轴进行对数缩放?

5

我正在使用.NET WPF几何类来绘制波形图。我一直在使用矩阵变换将屏幕坐标空间转换为我的坐标空间,这样非常简单,可以轻松跟踪窗口和缩放等。我甚至可以使用逆变换来计算鼠标位置的坐标。我使用内置的缩放和平移类,然后使用自定义矩阵来进行y轴翻转(没有现成的矩阵可用于翻转)。我希望能够在对数刻度上绘制这些波形图(无论是x轴还是y轴或两者都是),但我不确定是否可以通过矩阵变换实现。有人知道是否可能以及如果可能的话,应该使用什么矩阵吗?

2个回答

2
矩阵是线性变换,因此可以进行缩放、旋转等操作。但它们不能进行对数伸展,这是一种非线性变换。
编辑:但你应该能够自己完成这个任务,而不需要过多的麻烦。(不需要了解线性代数。)我的意思是,如果你想让x轴呈现对数刻度,请对你要绘制的x坐标取对数。棘手的部分是使比例尺在图形侧边工作——这归结为将每个刻度值从x转换为10^x(或者你使用的任何对数基数)。
因此,图例将显示:
1     10    100   1000

代替
1      2      3      4

谢谢,是的,我也觉得可能是这样,也许有一种方法可以创建自己的Transform类实现非线性变换?Transform抽象基类似乎仍然使用矩阵,这对于执行复合变换可能是必要的,因此这也可能不可行。看来我只能自己进行对数缩放了。真遗憾。 - Dave M
自从我学了线性代数以来已经过了太久的时间了。 - Dave M
我不是WPF专家,但我在MSDN上查看了Transform类的描述,它似乎专门设计用于线性变换。(这样做有很好的理由 - 它们非常灵活,而且更容易理解。) - Rob Lachlan

0

嗯,显然矩阵会是这样的:

( log(x) / x        0      ) ( x )  =  ( log(x) )
(      0        log(y) / y ) ( y )  =  ( log(y) )

但这显然没有用。你不能编写一个常数矩阵来进行非线性变换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接