【问题标题】:Is there a transformation matrix that can scale the x and/or y axis logarithmically?是否有可以对数缩放 x 和/或 y 轴的变换矩阵?
【发布时间】:2011-02-02 02:08:32
【问题描述】:

我正在使用 .net WPF 几何类来绘制波形图。我一直在使用矩阵变换将屏幕坐标空间转换为波形的坐标空间。一切都很好,跟踪我的窗口和缩放等非常简单。我什至可以使用逆变换根据坐标空间计算鼠标位置。我使用内置的 Scaling 和 Translation 类,然后使用自定义矩阵进行 y 轴翻转(没有用于翻转的预制矩阵)。我也希望能够在对数刻度上绘制这些波形(x 轴或 y 轴或两者),但我不确定这是否可以通过矩阵变换来实现。有谁知道这是否可能,如果可能,矩阵是什么?

【问题讨论】:

    标签: wpf math matrix transform


    【解决方案1】:

    矩阵是线性变换,因此它们可以缩放、旋转等。但它们不能以对数方式拉伸。这是一个非线性变换。

    编辑:但是您应该可以自己滚动,而不会遇到不必要的麻烦。 (不需要了解 lin alg。)我的意思是,如果您希望 x 轴采用对数刻度,请获取您正在绘制的 x 坐标的日志。棘手的部分是使比例图例在图表的一侧起作用——归结为将每个比例值从 x 转换为 10^x(或您使用的任何对数基数。)

    所以传说会这样写:

    1     10    100   1000
    

    而不是

    1      2      3      4
    

    【讨论】:

    • 谢谢,是的,我有点想可能是这种情况,也许有一种方法可以创建我自己的 Transform 类的实现来做非线性的事情? Transform 抽象基类似乎仍然使用矩阵,这可能是进行复合转换的必要条件,所以也许这也不可能。猜猜我只需要自己进行日志缩放。无赖。
    • 很久没学线性代数了
    • 我不是 WPF 专家,但是我查看了 MSDN 上对 Transform 类的描述,它似乎是专门为线性转换设计的。 (这是有充分理由的——它们用途广泛,而且更容易推理。)
    【解决方案2】:

    好吧,显然矩阵是这样的:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      相关资源
      最近更新 更多