Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.120.133] |
|
Сообщ.
#1
,
|
|
|
Приветствую.
Есть алгоритм который очень хотелось бы понять. Он ищет точку вращения по данным векторам. Картинка в аттаче. Пусть есть две пары точек A,B и C,D, которые представлены векторами AB, CD соответственно. Принимаем их за приложенные силы к некому рычагу CA. Дальше делается утверждение, что крутящий момент равен скалярному произведению векторов CA и BD (вычисляется определитель матрицы составленной из этих векторов).: 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 то получается совсем не то. Затем вычисляется координаты центра таким образом: 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 Я вроде как понимаю что тут вычисляются какие-то матрицы дополнения, но что-то у меня не выходит связать всё в одну картину. Понавспоминал кучу теории про векторы и матрицы, прочитал пару статьей про крутящий момент, но единой картины нет. Есть идеи? Прикреплённая картинка
|
Сообщ.
#2
,
|
|
|
Что такое E?
Что такое точка вращения? Выражение для torque - не скалярное, а косое (векторное) произведение. >общий крутящий момент равен ABxAE + CDxCE Это похоже на правду, если E - точка вращения Кроме того, на стержень действует продольная сила AB.AE + CD.CE (скалярные произведения) - это играет роль? |
Сообщ.
#3
,
|
|
|
Я не понял условия задачи.
Цитата Hsilgos @ Пусть есть две пары точек A,B и C,D, которые представлены векторами AB, CD соответственно. Нужно найти центр вращения, которое переводит точку А в С, а точку В в D? Добавлено Цитата MBo @ Выражение для torque - не скалярное, а косое (векторное) произведение. Ну, оно не векторное, хотя некоторые его так называют. Его ещё называют внешним в отличии внутреннего ( обычного скалярного произведения ). |
Сообщ.
#4
,
|
|
|
Цитата Что такое E? Что такое точка вращения? Да, прошу прощения, упустил. Цитата Выражение для torque - не скалярное, а косое (векторное) произведение Да, но как я понимаю в случае когда надо посчитать абсолютную величину это не важно, так как длинна вектора при векторном произведении численно равна площади прямоугольника при скалярном? Цитата Нужно найти центр вращения, которое переводит точку А в С, а точку В в D? Да, в изначальной задаче есть координаты всех четырех точек и известно что AC и BD составляют вектор. Как я понял используется формула для нахождения момента вращения. Но у меня как-то не очень выходит переложить всё обратно на бумагу |
Сообщ.
#5
,
|
|
|
Цитата Hsilgos @ Да, в изначальной задаче есть координаты всех четырех точек и известно что AC и BD составляют вектор. Любые две точки составляют вектор. Я подозреваю, что это всё-таки физика ( "Принимаем их за приложенные силы к некому рычагу" ), а не математика ( чистое вращение ). Если всё-таки это то, о чём я писал выше ( Нужно найти центр вращения, которое переводит точку А в С, а точку В в D ), то я могу описать своё решение такой задачи. |
Сообщ.
#6
,
|
|
|
Цитата Любые две точки составляют вектор Я же не спорю, я лишь обозначил как точки связаны. Цитата Я подозреваю, что это всё-таки физика ( "Принимаем их за приложенные силы к некому рычагу" ), а не математика ( чистое вращение ). Я подозреваю так же. Решение которое я привел явно оперирует векторами и явно отсылается к вот этому уравнению. Цитата Если всё-таки это то, о чём я писал выше ( Нужно найти центр вращения, которое переводит точку А в С, а точку В в D ), то я могу описать своё решение такой задачи. Было бы неплохо, хотя бы в общих чертах. |
Сообщ.
#7
,
|
|
|
> но как я понимаю в случае когда надо посчитать абсолютную величину это не важно,
Ну как это - например, скалярное произведение перпендикулярных векторов нулевое, а векторное - максимально. |
Сообщ.
#8
,
|
|
|
Пусть нам надо найти вращение на плоскости переводящее точку 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 находим центр вращения О, используя одно из начальных уравнений ( или их сумму для симметрии ). Это тоже система двух уравнений с двумя неизвестными. |
Сообщ.
#9
,
|
|
|
Цитата Пусть нам надо найти вращение на плоскости переводящее точку 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 находим центр вращения О, используя одно из начальных уравнений ( или их сумму для симметрии ). Это тоже система двух уравнений с двумя неизвестными Спасибо, постараюсь завтра разобраться, если что, вернусь с вопросами |
Сообщ.
#10
,
|
|
|
update.
Идею понял, но мне кажется не сработает в моем случае. Он накладывает ограничение на точки, считая что они связаны матрицей вращения/изменения масштаба. В моем случае это не так и в моем случае способ через крутящий момент выглядит чуть более подходящим |