def lin_rigid_tps_transform(tps_transform, lin_point): lin_ag, trans_g, w_ng, x_na = tps_transform.lin_ag, tps_transform.trans_g, tps_transform.w_ng, tps_transform.x_na # orientation part is gradient(f) orien = tps.tps_grad(np.array([lin_point]), lin_ag, trans_g, w_ng, x_na)[0] # translation part is f(a) - gradient(f)*a trans = tps.tps_eval(np.array([lin_point]), lin_ag, trans_g, w_ng, x_na)[0] - np.dot(orien, lin_point) linearized_transform = juc.trans_rot_to_hmat(trans, juc.mat2quat(orthogonalize3_cross(np.array([orien])))) return linearized_transform
def eval_partial(x_ma_flat): x_ma = x_ma_flat.reshape(-1,3) return tps.tps_eval(x_ma, lin_ag, trans_g, w_ng, pts0)