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

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

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

Пусть есть две пары точек 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 -
Мой сайт - prografix.github.io
Цитата
Что такое E?
Что такое точка вращения?

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

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

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

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

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

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

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

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

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

Цитата
Если всё-таки это то, о чём я писал выше ( Нужно найти центр вращения, которое переводит точку А в С, а точку В в 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 находим центр вращения О, используя одно из начальных уравнений ( или их сумму для симметрии ).
Это тоже система двух уравнений с двумя неизвестными.
Мой сайт - prografix.github.io
Цитата
Пусть нам надо найти вращение на плоскости переводящее точку 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.
Идею понял, но мне кажется не сработает в моем случае. Он накладывает ограничение на точки, считая что они связаны матрицей вращения/изменения масштаба. В моем случае это не так и в моем случае способ через крутящий момент выглядит чуть более подходящим
Мы, доктора, считаем, что иногда нельзя быть таким счастливым
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,1353 ]   [ 20 queries used ]   [ Generated: 18.03.19, 21:52 GMT ]