您可以使用6个方程定义唯一的线性变换。必须对齐的3个点提供了这6个方程,因为每对匹配点在x和y中提供了两个方程。
如果你想追求这个,我可以提供矩阵方程,它定义了线性变换的基础上它如何映射三个点。你反转这个矩阵,它将提供线性变换。
但做了这些,转换是完全明确的。您无法控制原始四边形角点的位置。一般来说,你甚至不能定义一个线性变换来将一个四边形映射到另一个上;这给出了只有6个未知数的8个方程(每个角2个)。其过度指定。实际上,线性变换必须总是将矩形映射为平行四边形,因此通常不能定义将一个四边形映射到另一个的线性变换。
所以,如果它不能是一个线性变换,它可以是一个非线性变换?嗯,是的,但非线性变换不一定会将直线映射为直线,因此四边形的映射边不会是直的。或任何其他线路。而且你仍然有14个方程(每个点和角都有2个方程),你必须发明一些非线性变换和14个未知数。
因此,所述的问题不能用线性变换求解;其超过指定。使用非线性变换将要求您设计一个具有14个自由变量的非线性变换(与线性变换中的6个变量相比),这将正确映射7个点,但直线将不再是直线。增加这个要求增加了无限多的约束条件(线条中的每一点都有一个约束条件),你甚至不能使用连续函数。
可能有一些解决方案,你正在做什么,你真的想做什么(即底层应用程序的需要),但作为一个数学问题是无法解决的。
让我知道你是否希望矩阵方程根据它如何变换3点来产生线性变换。
相当复杂的主题,https://www.tutorialspoint.com/computer_graphics/2d_transformation.htm虽然我认为像矩形一样简单的形状来旋转而不旋转很容易。 – maraca
您需要**透视**转换,而不是仿射一个。但要定义persp.transform,应该提供四个点对:https://www.cs.cmu.edu/~ph/texfund/texfund.pdf – MBo
@MBo查看第二个点在哪里移动,那不是透视变换,否则该点会向右移动得更多(在扭曲的矩形中绘制对角线以查看中心的位置)。 – m69