На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Компенсация поворота вектора в сторону заданных координат
    Задача запилить метод lookTo(Actor actor). Реализация следующая:

    ExpandedWrap disabled
      lookTo(Actor actor) {
        this.rotateTo(
          Math.atan2(actor.position.y - this.position.y, actor.position.x - this.position.x)
        );
      }


    Но существует некоторая проблема - поворот происходит не всегда в нужную сторону, иногда объекты описывают 360-градусный поворот. Пробовал такой алгоритм:
    - Получать дельту между текущим градусом поворота и результатом atan2 (в будущ.N)
    - Получать минимальное значение между Math.abs(N), Math.abs(N - Math.PI*2) и Math.abs(N + Math.PI*2)
    - Это минимальное значение и будет говорить о том какую компенсацию надо применять - оставлять как есть, или добавлять/вычитать PI*2

    В верном направлении я мыслю? Или есть более простые способы добиться минимального поворота "вектора" в сторону координат XY?

    Добавлено
    P.S. Пример проблемы: http://codepen.io/SerafimArts/pen/LkBWVG
    Сообщение отредактировано: Serafim -
      Цитата Serafim @
      В верном направлении я мыслю? Или есть более простые способы добиться минимального поворота "вектора" в сторону координат XY?
      Качественно - да, в верном. Более "простых способов" как бы нет, ибо под ними подразумеваются простенькие функции, кои все непрерывны, а поворот на 180 градусов терпит неустранимый разрыв (можно по двум путям туда повернуться), так что всё равно где-то будет сравнение и выбор. :yes-sad:
        Знак функции CCW показывает в какую сторону нужно вращать:
        ExpandedWrap disabled
          Function CCW(v1 As Vector, v2 As Vector) As Single
            CCW = v1.x * v2.y - v1.y * v2.x
          End Function
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0276 ]   [ 16 queries used ]   [ Generated: 28.03.24, 10:23 GMT ]