Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 求变换矩阵,给定两组平面参数和每个平面上的点_Matlab_Math_Transformation_Plane - Fatal编程技术网

Matlab 求变换矩阵,给定两组平面参数和每个平面上的点

Matlab 求变换矩阵,给定两组平面参数和每个平面上的点,matlab,math,transformation,plane,Matlab,Math,Transformation,Plane,问题: 我有一组三维平面。我使用以下信息表示它们 平面方程:Ax+By+Cz+D=0;(我有向量中的系数) 从中找到平面参数A、B、C、D的点(使用最小二乘法) 名为frame1[]的结构数组用于存储此信息帧1[1]表示第一个平面。它有以下成员,frame[1]。平面参数(1 x 4向量)和frame1[1]。点(N个点的3 x N矩阵) 现在我在一组结构中有另一组平面,名为frame2[]。此集合将至少包含在frame1[]中的5个平面。就数组索引而言,它们不会有一对一的对应关系。换句话说,f

问题:

我有一组三维平面。我使用以下信息表示它们

  • 平面方程:Ax+By+Cz+D=0;(我有向量中的系数)
  • 从中找到平面参数A、B、C、D的点(使用最小二乘法)
  • 名为
    frame1[]
    的结构数组用于存储此信息<代码>帧1[1]表示第一个平面。它有以下成员,
    frame[1]。平面参数(1 x 4向量)和
    frame1[1]。点(N个点的3 x N矩阵)

    现在我在一组结构中有另一组平面,名为
    frame2[]
    。此集合将至少包含在
    frame1[]
    中的5个平面。就数组索引而言,它们不会有一对一的对应关系。换句话说,
    frame1[1]
    frame2[1]
    可能代表不同的平面

    我需要什么:

    一种方法,通过该方法,我将能够获得单个齐次变换[4x4],该变换将
    frame2[]
    中的所有平面变换为
    frame1[]
    。我知道答案会有错误。换句话说,完美的变换矩阵可能不存在,在这种情况下,最适合数据的变换矩阵(在最小二乘意义上)就足够了

    约束条件: 旋转角度非常小。如果无法推导出精确的角度,可以在变换矩阵中使用类似于
    cos(alpha)=1
    sin(alpha)=alpha
    的近似值


    语言:MATLAB

    确实可以通过4x4矩阵将一个平面变换为另一个平面。但是你如何定义两个平面之间的“误差”或“距离”?@ysakamoto所说的“误差”我只是指角度的近似值。两个平面之间的“距离”为零,除非它们平行。我同意。但是,把它想象成一个刚体,而不是一个平面。我们知道物体的重心(由点给出),我们知道平面表面的法线(由平面参数给出,我假设,如果我错了,请纠正我)。所以4x4应该有旋转信息和重心的平移。这个翻译就是我所说的“距离”,我不太明白你想做什么。是否仅使用一个4x4变换矩阵将5个平面变换为1个平面?每个平面都需要唯一的变换。因此,如果只使用一个变换,则在变换后将无法获得正确的平面。我想这就是你所说的“错误”。@ysakamoto,如果我的语言让你感到困惑,很抱歉。我有两套五架飞机。我想找到一个可以将一个集合转换为另一个集合的变换矩阵。是的。因此,如果使用一个变换矩阵将5个平面变换为其他5个平面,则无法准确地执行此操作,因为一个变换矩阵仅适用于一个平面。然后我认为你需要找到使误差最小化的变换矩阵,但是你需要定义如何计算“误差”。