Vector 2, вращение объекта как в иерархий, как? SDL2

Как реализовать вращение объекта на двухмерном пространстве имитируя иерархию объектов | SDL2

        Vec2 arranged(x,y);
        Vec2 rotated =Vec2::RotateUp(renderSource->transform()->localAngle()*Mathf::Deg2Rad, arranged);
        arranged.x -= rotated.x;
        arranged.y += rotated.y;

        //arranged = Vec2::Perpendicular(arranged);
        //Положение по горизонтале
        wrapper.dst.x = arranged.x + ((rect.w - wrapper.dst.w) / 2.0f - (point.x - sourcePoint.x) * squarePerPixels);
        //Положение по вертикале
        wrapper.dst.y = arranged.y + ((rect.h - wrapper.dst.h) / 2.0f + (point.y - sourcePoint.y) * squarePerPixels);

        // SDL_RenderCopyF(renderer, renderInfo.texture, (SDL_Rect*)&renderInfo.src, (SDL_FRect*)&dst);
        SDL_RenderCopyExF(renderer, wrapper.texture->native(), (SDL_Rect*)&wrapper.src,
                          reinterpret_cast<SDL_FRect*>(&wrapper.dst), renderSource->transform()->localAngle(), nullptr,
                          SDL_RendererFlip::SDL_FLIP_NONE);
    

Центральный объекто смотрит вверх, и его хвост правильный а остальные имеют проблемы

Центральный объекто смотрит вверх, и его хвост правильный а остальные имеют проблемы


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

Автор решения: Alexandr Kosolobov

Самое простое решение -- добавить хвост в иерархию этого насекомого. Выглядеть должно примерно следующим образом:

Monster
- MonsterBody
- MonsterTail

Правка: Исходя из обсуждения предлагаю изменить функцию RotateUp следующим образом:

const Vector2 Vector2::RotateAround(Vector2 center, Vector2 localPosition, float angle)
{
    float Sin = Mathf::Sin(angle);
    float Cos = Mathf::Cos(angle);
    return new Vector2(center.x + (localPosition.x * Sin), center.y +
        (localPosition.y * Cos));
}

где localPosition это изначальный вектор смешения объекта относительно center

→ Ссылка