我希望我可以在这里发布我的问题(可能在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)。
由于
答案 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个未知数的系统可以通过使用来自线性代数的标准方法来解决,例如, LAPACK或Eigen。
当且仅当三个原始点不在一条直线上时,这是有效的。