Учитывая исходную и трансформированную сетку треугольника, а также матрицы вращения для каждой грани, как мне вычислить повороты вершин?Это просто одна из матриц вращения со смежной грани?Если я не ошибаюсь, вращение не уникально, так что было бы полезно использовать одно вращение лица.
Это способ вычисления преобразования лица.
# template is the positions of the vertices in the original mesh,
# m respectively those of the transformed one.
# v denotes the triangle corners
origin = template[v[0], :].T
e1 = template[v[1], :].T - origin
e2 = template[v[2], :].T - origin
n = np.cross(e1, e2)
n = n / np.linalg.norm(n)
src = np.asarray([e1, e2, n]).T
to = m[v[0], :].T
t1 = m[v[1], :].T - to
t2 = m[v[2], :].T - to
tn = np.cross(t1, t2)
tn = tn / np.linalg.norm(tn)
tgt = np.asarray([t1, t2, tn]).T
# solve t @ src = tgt for t
t = (np.linalg.solve(src.T, tgt.T)).T
r = t
u, _,v = np.linalg.svd(r)
r = u @ v