我希望获得一些关于实现梯形失真效果的最佳方法的建议,该效果尊重网格中的各个点,而不仅仅是网格本身。
我有一个矩形(网格),其中绘制了多个点(x,y)。我希望能够在代码中实现垂直梯形失真效果,而不是 XAML,如下所示:
有人对最好/最简单的方法有任何建议吗?我现在正在看矩阵,但想知道我是否想得太多了?如果矩阵是正确的想法,那么有人可以提供任何合适的链接或示例来说明如何将它们应用到每个点的 x,y 值吗?
谢谢你,
迈克
您肯定会查看类似这样的矩阵。我认为你需要一个Homography变换,因为像缩放、旋转和剪切这样的仿射变换是不够的。
似乎有很多库和文章解释了如何从一组源点和目标点创建这样的矩阵。这在图像处理中应用或恢复透视变换很常见。第一个谷歌搜索是 HomographySharp,但这也应该在大多数图像处理库中可用,例如 Open CV。
您还可以根据参数创建一个矩阵。我的线性代数课程是很久以前的事了,但基本思想是使用 3x3 矩阵进行 2D(或使用 4x4 进行 3D)。向量由
w
分量扩展,如果不明确则隐含为 1。变换后,通过将所有其他分量除以 w
来对向量进行归一化。变换看起来像
[1 0 tx]
[0 1 ty]
[px py 1]
其中底行的px/xy参数用于控制透视效果。 tx/ty 是平移,左上角 2x2 是用于缩放/旋转/剪切等的仿射变换。