【问题标题】:Under what circumstances would System.Windows.Media.Transform.Inverse return nullSystem.Windows.Media.Transform.Inverse 在什么情况下会返回 null
【发布时间】:2020-02-07 01:56:33
【问题描述】:

根据System.Windows.Media.Transform.Inversethe documentation,函数

如果存在,则获取此变换的逆。

但没有更多的解释,那里。那么逆什么时候会存在呢?在什么情况下或转换类型?

我使用的 TransformGroup 同时具有我单独修改的 TranslateTransform 和 RotateTransform。我需要担心它会为此返回 null 吗?

【问题讨论】:

    标签: wpf transform


    【解决方案1】:

    存在描述不可逆变换的技术方法。参见例如https://en.wikipedia.org/wiki/Affine_transformation#Groups。但直观地说,很容易看出,假设一个变换可以表示为一个矩阵,并且假设变换矩阵的逆矩阵是乘以原始变换矩阵的矩阵,就可以得到单位矩阵,它将会出现直到除法和乘法的数学运算。

    特别是,正如我可以提供除零以外的任何标量的乘法逆,只需将乘法恒等式(即1)除以该数字,同样,我可以提供任何矩阵的乘法逆当我将身份除以该矩阵时,需要除以零。

    从几何上讲,如果您的变换以某种方式导致变换后的几何在某个维度上具有非零长度,这将失败(即会发生除以零)。

    由此,我们可以看到,如果您使用缩放变换,其中至少一个轴上的比例因子为零,那么该变换将是不可逆的。

    确实:

    GeneralTransform t = new ScaleTransform(1, 0).Inverse;
    

    返回null

    你需要担心吗?我不知道。这首先取决于您如何创建转换。您的问题中没有该详细信息。

    通常情况下,我认为这不是您需要考虑的事情。但是,如果您处于某种情况下,无论出于何种原因,变换的比例因子最终为零,无论是通过用户输入(无论是数字输入还是通过拖动屏幕上某些形状的大小),连续组合分数比例因子等,然后当然,理论上你可以找到不可逆变换。

    如果是我,除非我可以肯定地证明我没有对会导致它不可逆的变换做任何事情,否则我会继续并确保我处理 null 的结果合理的方式。这可能是更改先决条件以创建确定性,或者您允许它,然后如果它不可逆则不对逆变换执行任何操作(因为如果不是,则可能没有合理的屏幕渲染可以使任何无论如何,这似乎是一种合理的方法。

    【讨论】:

    • 哇,这是一个很好的答案。非常感激。特别是因为矩阵数学对我来说从来都不是“直观的”!
    猜你喜欢
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    相关资源
    最近更新 更多