Math C语言中的仿射变换

Math C语言中的仿射变换,math,Math,我希望我能把我的问题贴在这里(也许在?) 我有一个坐标数组 double coordinates[MAX_COORD][2] 以及包含前3个坐标的6个坐标的数组(坐标[0][0]…) 以及用户插入的其他3个坐标 如何将六个坐标转换为一个函数来转换所有坐标 void affineTrasformation(double coord[MAX_COORD][2], const double points[6][2]) 仿射变换公式为: X = a*x + b*y + c Y = d*x + e*y

我希望我能把我的问题贴在这里(也许在?)

我有一个坐标数组

double coordinates[MAX_COORD][2]
以及包含前3个坐标的6个坐标的数组(坐标[0][0]…)

以及用户插入的其他3个坐标

如何将六个坐标转换为一个函数来转换所有坐标

void affineTrasformation(double coord[MAX_COORD][2], const double points[6][2])
仿射变换公式为:

X = a*x + b*y + c
Y = d*x + e*y + f
问题是从我的6点中获取6个变量(a、b、c、d、e、f)


谢谢

让我们假设您有三个原始点
(x1,y1)、(x2,y2)、(x3,y3)
和三个转换点
(x1,y1)、(x2,y2)、(x3,y3)
。使用您的转换公式,我们得到6个方程:

X1 = a*x1 + b*y1 + c
Y1 = d*x1 + e*y1 + f
X2 = a*x2 + b*y2 + c
Y2 = d*x2 + e*y2 + f
X3 = a*x3 + b*y3 + c
Y3 = d*x3 + e*y3 + f
这是6个未知系数的线性方程组
a、b、c、d、e、f
。这样一个由6个方程和6个未知数组成的系统可以通过使用线性代数的标准方法来求解,例如or


当且仅当三个原点不在一条直线上时,此方法才有效。

只是一个提示:这里有一个矩阵的乘积。。。
X1 = a*x1 + b*y1 + c
Y1 = d*x1 + e*y1 + f
X2 = a*x2 + b*y2 + c
Y2 = d*x2 + e*y2 + f
X3 = a*x3 + b*y3 + c
Y3 = d*x3 + e*y3 + f