Ошибка при работе со смещением. Компьютерная графика

Пытаюсь отрисовать поднимающуюся руку при помощи самописных примитивов и матрицы поворота. Без смещения delta_2 (смещение точки, вокруг которой должен выполняться поворот) фигура поворачивается верно, но когда я пытаюсь выполнить поворот относительно смещенной точки, происходит смещение без поворота. Не понимаю, что я упустил.

В отрисовке примитивов/кривых, функции поворота ошибок нет. Также в цикле есть правильное смещение (1 вложенный цикл), там я смещаю ладонь относительно конца предплечья

Точки примитивов:

elbow = [
    np.array([137, 394]),
    np.array([45, 251]),
    np.array([42, 65]),
    np.array([65, 8]),
    np.array([196, 52]),
    np.array([126, 42]),
    np.array([186, 90]),
    np.array([215, 399]),
    np.array([199, 381]),
    np.array([140, 392])
]

fing_1_fal_1 = [
    np.array([120, 218]),
    np.array([132, 119]),
    np.array([233, 59]),
    np.array([384, 53]),
    np.array([381, 222]),
    np.array([259, 224]),
    np.array([247, 140]),
    np.array([148, 273]),
    np.array([118, 219])
]

fing_1_fal_2 = [
    np.array([148, 205]),
    np.array([114, 129]),
    np.array([197, 167]),
    np.array([264, 148]),
    np.array([258, 61]),
    np.array([325, 228]),
    np.array([142, 233]),
    np.array([149, 205])
]

Мой код:

for i in range(80): #количество кадров
    elbow_modif = [rotate_around_point_matrix(p, -np.pi / 180, 753, 361) for p in elbow_modif]

    new_palm_modif = []
    new_palm_stroke_modif = []
    new_fing_1_fal_1_modif = []

    pivot_old_1 = (783, 692) # конец предплечья - точка вращения ладони
    pivot_old_2 = (841, 695)

    pivot_new_1 = rotate_around_point_matrix(pivot_old_1, -np.pi / 180, 753, 361)
    pivot_new_2 = rotate_around_point_matrix(pivot_old_2, -np.pi / 180, 753, 361)

    delta_1 = pivot_new_1 - pivot_old_1
    delta_2 = pivot_new_2 - pivot_old_2

    for p1, p2 in zip(palm_modif, palm_stroke_modif):
        new_p1 = rotate_around_point_matrix(p1, -np.pi / 180, 783, 692) + delta_1
        new_palm_modif.append(new_p1)
        new_p2 = rotate_around_point_matrix(p2, -np.pi / 180, 783, 692) + delta_1
        new_palm_stroke_modif.append(new_p2)

    for p in fing_1_fal_1_modif:
        
        p_shifted = p + delta_2

        new_p = rotate_around_point_matrix(p_shifted, -np.pi / 180, pivot_new_2[0], pivot_new_2[1])
        if i % 5 == 0:
            new_p = rotate_around_point_matrix(new_p, -np.pi / 180 * 2, pivot_new_2[0], pivot_new_2[1])
        new_fing_1_fal_1_modif.append(new_p)

    pivot_old_1 = pivot_new_1
    pivot_old_2 = pivot_new_2

    palm_modif = new_palm_modif
    palm_stroke_modif = new_palm_stroke_modif
    fing_1_fal_1_modif = new_fing_1_fal_1_modif

Ответы (0 шт):