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