沿任意平面平移 3D 点

Translate 3D points along arbitrary plane

我正在使用 3D PDB 坐标。我首先使用 numpy.linalg.lstsq 来求解最小二乘方程,本质上是给我平面的系数(我认为)。我可以使用 matplotlib 查看飞机,它看起来是正确的。我希望能够沿最小二乘解给出的平面平移我的 3D 坐标。例如,我希望能够平移新平面 (X,Y) 中的点。将点旋转到法线为 (0,0,1) 的平面上会更容易吗?

如果我理解你的问题是对的,你有一个固定点并且想在你有法向量的平面上移动它。 假设您的法向量 n 是 (0,0,1),您的点 p 是 (1,1,1)。 如果我们想留在平面上,我们的平移向量 t 必须垂直于法向量。(n*t=0) 其中 * 表示标量积。 你说你想保持 z 不变,所以我们设置 t_z = 0。然后假设你想将你的点移动 t_x = 1。现在你只需要求解方程:0*1+ t_y 的 0*t_y+1*0=0 在这种情况下是任意的,因为等式已经是 0。所以 t_x = 1 和 t_z 的平移向量= 0 是 t = (1,t_y,0)。 在一般情况下,您只需根据需要固定尽可能多的 t 坐标,然后使用 nt=0 方程计算剩余坐标。 这不应该太难实施。 所以一句话:只要平移向量垂直于你的法向量(nt=0),你就保持在同一平面上。