На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Центр вращения
    Приветствую.

    Есть алгоритм который очень хотелось бы понять. Он ищет точку вращения по данным векторам.

    Картинка в аттаче.

    Пусть есть две пары точек A,B и C,D, которые представлены векторами AB, CD соответственно.
    Принимаем их за приложенные силы к некому рычагу CA.

    Дальше делается утверждение, что крутящий момент равен скалярному произведению векторов CA и BD (вычисляется определитель матрицы составленной из этих векторов).:
    ExpandedWrap disabled
      float torque = (B.x - D.x)(A.y - C.y) - (A.x - C.x)(B.y - D.y)

    Как я не вычислял у меня что-то так не выходит
    Если мы принимаем точку E за центр вращения, то, как я понимаю, общий крутящий момент равен ABxAE + CDxCE (всё векторы) и если посчитать DExCA через введенные раннее AB, AE, CD, CE то получается совсем не то.
    Затем вычисляется координаты центра таким образом:
    ExpandedWrap disabled
      float determinant1 = A.x * C.y - C.x * A.y;
      float determinant2 = B.x * D.y - D.x * B.y;
      rotation_center.x = (determinant2 * (A.x - C.x) - determinant1 * (B.x - D.x)) / torque

    Я вроде как понимаю что тут вычисляются какие-то матрицы дополнения, но что-то у меня не выходит связать всё в одну картину. Понавспоминал кучу теории про векторы и матрицы, прочитал пару статьей про крутящий момент, но единой картины нет.

    Есть идеи?
    Прикреплённая картинка
    Прикреплённая картинка
    Сообщение отредактировано: Hsilgos -
      Что такое E?
      Что такое точка вращения?
      Выражение для torque - не скалярное, а косое (векторное) произведение.

      >общий крутящий момент равен ABxAE + CDxCE
      Это похоже на правду, если E - точка вращения
      Кроме того, на стержень действует продольная сила AB.AE + CD.CE (скалярные произведения) - это играет роль?
        Я не понял условия задачи.
        Цитата Hsilgos @
        Пусть есть две пары точек A,B и C,D, которые представлены векторами AB, CD соответственно.

        Нужно найти центр вращения, которое переводит точку А в С, а точку В в D?

        Добавлено
        Цитата MBo @
        Выражение для torque - не скалярное, а косое (векторное) произведение.

        Ну, оно не векторное, хотя некоторые его так называют. Его ещё называют внешним в отличии внутреннего ( обычного скалярного произведения ).
        Сообщение отредактировано: prografix -
          Цитата
          Что такое E?
          Что такое точка вращения?

          Да, прошу прощения, упустил.

          Цитата
          Выражение для torque - не скалярное, а косое (векторное) произведение

          Да, но как я понимаю в случае когда надо посчитать абсолютную величину это не важно, так как длинна вектора при векторном произведении численно равна площади прямоугольника при скалярном?

          Цитата
          Нужно найти центр вращения, которое переводит точку А в С, а точку В в D?

          Да, в изначальной задаче есть координаты всех четырех точек и известно что AC и BD составляют вектор.
          Как я понял используется формула для нахождения момента вращения. Но у меня как-то не очень выходит переложить всё обратно на бумагу
            Цитата Hsilgos @
            Да, в изначальной задаче есть координаты всех четырех точек и известно что AC и BD составляют вектор.

            Любые две точки составляют вектор. Я подозреваю, что это всё-таки физика ( "Принимаем их за приложенные силы к некому рычагу" ), а не математика ( чистое вращение ).
            Если всё-таки это то, о чём я писал выше ( Нужно найти центр вращения, которое переводит точку А в С, а точку В в D ), то я могу описать своё решение такой задачи.
              Цитата
              Любые две точки составляют вектор

              Я же не спорю, я лишь обозначил как точки связаны.

              Цитата
              Я подозреваю, что это всё-таки физика ( "Принимаем их за приложенные силы к некому рычагу" ), а не математика ( чистое вращение ).

              Я подозреваю так же. Решение которое я привел явно оперирует векторами и явно отсылается к вот этому уравнению.

              Цитата
              Если всё-таки это то, о чём я писал выше ( Нужно найти центр вращения, которое переводит точку А в С, а точку В в D ), то я могу описать своё решение такой задачи.

              Было бы неплохо, хотя бы в общих чертах.
                > но как я понимаю в случае когда надо посчитать абсолютную величину это не важно,

                Ну как это - например, скалярное произведение перпендикулярных векторов нулевое, а векторное - максимально.
                  Пусть нам надо найти вращение на плоскости переводящее точку A в точку C, а B -> D.
                  Запишем систему уравнений
                  R * ( A - O ) = C - O
                  R * ( B - O ) = D - O,
                  здесь R - матрица поворота, O - центр вращения.
                  Запишем R например, так:
                  | s -t |
                  | t s |
                  Строго говоря, эта матрица не только поворачивает, но и изменяет масштаб в случае, если расстояние между точками A и B не равно расстоянию между точками C и D.
                  Далее получаем ( вычитая одно уравнение из другого ):
                  R * ( B - A ) = D - C
                  Это система двух уравнений с двумя неизвестными s и t.
                  Получив матрицу R находим центр вращения О, используя одно из начальных уравнений ( или их сумму для симметрии ).
                  Это тоже система двух уравнений с двумя неизвестными.
                    Цитата
                    Пусть нам надо найти вращение на плоскости переводящее точку A в точку C, а B -> D.
                    Запишем систему уравнений
                    R * ( A - O ) = C - O
                    R * ( B - O ) = D - O,
                    здесь R - матрица поворота, O - центр вращения.
                    Запишем R например, так:
                    | s -t |
                    | t s |
                    Строго говоря, эта матрица не только поворачивает, но и изменяет масштаб в случае, если расстояние между точками A и B не равно расстоянию между точками C и D.
                    Далее получаем ( вычитая одно уравнение из другого ):
                    R * ( B - A ) = D - C
                    Это система двух уравнений с двумя неизвестными s и t.
                    Получив матрицу R находим центр вращения О, используя одно из начальных уравнений ( или их сумму для симметрии ).
                    Это тоже система двух уравнений с двумя неизвестными


                    Спасибо, постараюсь завтра разобраться, если что, вернусь с вопросами
                    Сообщение отредактировано: Hsilgos -
                      update.
                      Идею понял, но мне кажется не сработает в моем случае. Он накладывает ограничение на точки, считая что они связаны матрицей вращения/изменения масштаба. В моем случае это не так и в моем случае способ через крутящий момент выглядит чуть более подходящим
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


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