gpt4 book ai didi

matrix - 我可以计算给定一组点的变换矩阵吗?

转载 作者:行者123 更新时间:2023-12-02 10:43:14 25 4
gpt4 key购买 nike

我正在尝试从结果中扣除 2D 转换参数。

给出了未知 X-Y 坐标系中的大量样本以及 WGS84(经度、纬度)中各自对应的样本。由于面积很小,我们也可以假设目标系统是平坦的。

遗憾的是,我不知道使用了哪种缩放、旋转、平移顺序,而且我什至不确定是否有 1 个或 2 个翻译。

我尝试创建一个冗长的方程系统,但结果太复杂了,我无法处理。基本几何图形也让我失败,因为变换的顺序未知,我必须检查每种可能的组合顺序。

是否有系统的方法来解决这个问题?

最佳答案

计算缩放因子很容易,只需选择任意两点并找到它们在 X-Y 空间和 WGS84 空间中的距离,它们的比率就是您的缩放因子。

旋转和平移有点棘手,但当您了解到应用任意数量的旋转或平移(仅在二维中!)的结果可以减少为围绕某个未知点的单个旋转时,难度就不是那么困难了一些未知的角度。

突然间,您有 N 个点来确定 3 个未知数:旋转轴(x 和 y 坐标)和旋转角度。

计算旋转如下所示:

    Pr = R*(Pxy - Paxis_xy) + Paxis_xy

Pr 是 X-Y 空间中的旋转点,然后需要将其转换为 WGS84 空间(如果坐标系的轴不同)。
R 是熟悉的 rotation matrix取决于您的旋转角度。
Pxy 是 X-Y 空间中未旋转的点。
Paxis_xy 是 X-Y 空间中的旋转轴。

要实际找到 3 个未知数,您需要根据找到的缩放因子取消 WGS84 点的缩放(或等效地缩放 X-Y 点)并移动点,以便两个坐标系具有相同的原点。

首先求旋转角度:取两对对应的点P1, P1'P2, P2'并写出

     P1' = R(P1-A) + A
P2' = R(P2-A) + A

为了简洁起见,我交换了A = Paxis_xy。将两个方程相减得出:

     P2'-P1' = R(P2-P1)
B = R * C
Bx = cos(a) * Cx - sin(a) * Cy
By = cos(a) * Cx + sin(a) * Cy
By + Bx = 2 * cos(a) * Cx
(By + Bx) / (2 * Cx) = cos(a)
...
(By - Bx) / (2 * Cy) = sin(a)
a = atan2(sin(a), cos(a)) <-- to get the right quadrant

如果您有自己的角度,您还可以快速检查一下 cos(a) * cos(a) + sin(a) * sin(a) == 1 以确保您的所有计算都是正确的,或者您的系统确实是一个保持方向的等轴测图(仅包含平移和旋转)。

既然我们知道了a,我们就知道了R,所以要找到A,我们要做的就是:

    P1` = R(P1-A) + A
P1' - R*P1 = (I-R)A
A = (inverse(I-R)) * (P1' - R*P1)

其中inversion of a 2x2 matrix is easy .

编辑:上面有一个错误,或者更具体地说,有一种情况需要单独处理。
存在一种平移和旋转的组合,它不会简化为单个旋转,而是单个平移。你可以把它想象成固定点(运算后有多少点不变)。
平移没有固定点(所有点都会改变),旋转有 1 个固定点(轴不改变)。事实证明,两次旋转留下 1 个固定点,一次平移和一次旋转留下 1 个固定点,这(有一点证据表明固定点的数量可以告诉您执行的操作)是这些结果的任意组合的原因单次旋转。

这对您来说意味着,如果您的角度为 0,那么使用上述方法也会得到 A = 0,这可能是不正确的。在这种情况下,您必须执行A = P1' - P1

关于matrix - 我可以计算给定一组点的变换矩阵吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17171443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com