gpt4 book ai didi

math - 最小化距离的旋转矩阵

转载 作者:行者123 更新时间:2023-12-04 22:38:16 25 4
gpt4 key购买 nike

假设我在 3D 空间中有两个点(a 和 b)和一个称为 n 的固定轴/单位向量。

我想创建一个旋转矩阵,最小化点 a(未旋转)和旋转点 b 之间的欧几里得距离。

例如:

 Q := matrix_from_axis_and_angle (n, alpha);

find the unknown alpha that minimizes sqrt(|a - b*Q|)

顺便说一句 - 如果使用单位四元数可以更容易地表达解决方案/算法,请继续使用它们。我只是使用矩阵来表达我的问题,因为它们被更广泛地使用。

哦 - 我知道有一些退化的情况( a 或 b 与 n ect 完全一致。)这些可以忽略。我只是在寻找可以计算单个解决方案的情况。

最佳答案

听起来很容易。假设单位向量 n 意味着绕通过点 x0 的平行于 n 的线旋转。如果 x0 != 原点,则通过 -x0 平移坐标系以获得点 a'b'相对于新坐标系原点 0,并使用这 2 个点而不是 a 和 b。

1) 计算向量 ry = n x a

2) 计算单位向量 uy = ry 方向的单位向量

3) 计算单位向量ux = uy x n

您现在有一个由相互垂直的单位向量 ux、uy 和 n 组成的三元组,它们构成了右手坐标系。可以证明:

 a = dot(a,n) * n  +  dot(a,ux) * ux

这是因为单位向量 uy 平行于 ry,而 ry 与 a 和 n 都垂直。 (从第 1 步开始)

4) 沿单位向量ux, uy 计算b 的分量。 a 的分量是 (ax,0),其中 ax = dot(a,ux)。 b 的组件是 (bx,by) 其中 bx = dot(b,ux), by = dot(b,uy)。由于右手坐标系, ax 始终为正,因此您实际上不需要计算它。

5) 计算 theta = atan2(by, bx)。

您的旋转矩阵是相对于坐标系 (ux,uy,n) 绕 n 轴旋转角度 -theta 的矩阵。

如果 a 与 n 平行(步骤 1 和 2)或 b 与 n 平行(步骤 4、5),这将产生退化的答案。

关于math - 最小化距离的旋转矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1621048/

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