Крутящий момент - это просто приложенная сила, спроецированная перпендикулярно вектору между точкой, где сила приложена, и центром тяжести объекта. Таким образом, если вы тянете перпендикулярно диаметру, крутящий момент равен приложенному усилию. Если вы тянете прямо от центроида, крутящий момент равен нулю.
Обычно вы хотели бы сделать это, моделируя пружину, соединяющую исходную точку мыши с текущей позицией мыши (в локальных координатах объекта). Использование пружины и некоторое трение немного сглаживают движения мыши.
Я слышал много хорошего о Бурундуке как о 2D физическом пакете:
http://code.google.com/p/chipmunk-physics/
Хорошо, уже поздно, и мне нужно спать. Но вот некоторые отправные точки. Вы можете выполнить все вычисления в одном координатном пространстве или определить координатное пространство для каждого объекта. В большинстве систем анимации люди используют координатные пространства для каждого объекта и используют матрицы преобразования для преобразования, потому что это облегчает математику.
Основная последовательность расчетов:
При наведении мыши, вы делаете свой хит-тест,
и сохранить координаты
событие (в координате объекта
пространство).
Когда мышь перемещается, вы создаете
вектор, представляющий расстояние
переехал.
Сила, действующая на пружину, равна k * M, где M - величина расстояния между этой начальной точкой нажатия мыши от шага 1 и текущей позицией мыши. k - это постоянная пружины пружины.
Проецируйте этот вектор на два вектора направления, начиная с начальной точки мыши. Одно направление - к центру объекта, другое - на 90 градусов.
Сила, спроецированная к центру объекта, сместит его к курсору мыши, а другая сила - это крутящий момент вокруг оси. Степень ускорения объекта зависит от его массы, а ускорение вращения зависит от момента импульса.
Трение и вязкость среды, в которой движется объект, вызывает сопротивление, которое просто уменьшает движение объекта с течением времени.
Или, может быть, вы просто хотите подделать это. В этом случае просто сохраните местоположение (x, y) прямоугольника и его текущее вращение, phi. Затем сделайте это:
- Захватить положение мыши в мировых координатах
- Когда мышь перемещается, перемещайте блок в соответствии с изменением положения мыши
- Рассчитать угол между мышью и центром объекта (здесь полезен atan2), а также между центром объекта и начальной точкой опускания мыши. Добавьте разницу между двумя углами к повороту прямоугольника.