C中的仿射变换

时间:2014-06-12 15:47:11

标签: math

我希望我可以在这里发布我的问题(可能在Math上?)

我有一个坐标数组

double coordinates[MAX_COORD][2]

包含前3个坐标(坐标[0] [0] ...)

的6个坐标数组
double points[6][2]

和用户插入的其他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)。

由于

1 个答案:

答案 0 :(得分:2)

假设您有三个原始点(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个未知数的系统可以通过使用来自线性代数的标准方法来解决,例如, LAPACKEigen

当且仅当三个原始点不在一条直线上时,这是有效的。