Эффект Джанибекова (гайка Джанибекова)

История открытия эффекта

эффект Джанибекова был описан в 1985 году

При транспортировке грузов в космос вещи упаковываются в мешки, которые крепятся металлическими лентами, зафиксированными винтами и "барашками" гайками с "ушками". Разбирая груз в невесомости, достаточно стукнуть пальцем по "барашку". Он отлетает, ты его спокойно ловишь и кладешь в карман. Открутив очередной "барашек", Владимир Александрович обратил внимание, как гайка, пролетев 40 сантиметров, неожиданно перевернулась вокруг своей оси и полетела дальше. Пролетев еще 40 сантиметров, опять перевернулась. Джанибеков закрутил "барашек" обратно и повторил эксперимент. Результат тот же. Тогда космонавт попробовал повторить с другим "барашком". Ее полет до "точки переворота" составил 43 сантиметра. Джанибеков решил попробовать с каким-нибудь другим объектом. Запущенный пластилиновый шарик точно так же, пролетев некоторое расстояние, перевернулся вокруг своей оси и полетел дальше.

Источник: http://otvet.mail.ru/question/9420973/



Программа демонстрирующая эффект Джанибекова.

Скачать программу: djanibek.zip,

Для запуска программы нажмите на кнопочку (Start). Гайку можно вращать и масштабировать кнопками мышки и роликом.

Эффект Джанибекова заключается в том, что тело свободно вращающееся в невесомости и имеющее определённые моменты инерции и начальные скорости вращения, ведёт себя следующим образом: сначала оно вращается вокруг одной оси, потом эта ось вдруг неожиданно переворачивается в противоположенную сторону, после чего тело продолжает вращаться как и до переворота, потом ось опять переворачивается в противоположенную сторону, возвращаясь в исходное положение, и тело опять вращаться как в начале, а потом опять ось переворачивается и так далее.

Поскольку в земных условиях посмотреть на эффект Джанибекова сложно, из-за отсутствия невесомости, то как это происходит можно посмотреть в приведённой программе, которая эффект Джанибекова неплохо моделирует. Делается это так:

Методика моделирования эффекта Джанибекова

В качестве начальных условий нужно задать три момента инерции (Iteration moments) тела. Вместо них можно задать размеры условного параллелепипеда который будем вращать (Cube sides) и плотность его материала (density), тогда его моменты инерции вычисляются по следующим формулам:

  1. Ix = density * x * y * z * (y2 + z2) / 12
  2. Iy = density * x * y * z * (x2 + z2) / 12
  3. Iz = density * x * y * z * (x2 + y2) / 12

Также задаются три начальные скорости вращения по осям (wx, wy, wz) в оборотах в секунду. Чтобы превратить их в углы поворотов (OmegaX, OmegaY, OmegaZ), их надо домножить на 2*Pi.

Далее вычисляются комплексы моментов из формулы Эйлера:

  1. Dix = (Iz - Iy) / Ix
  2. Diy = (Iz - Iy) / Ix
  3. Diz = (Iy - Ix) / Iz

После чего начинается итерирование, то есть последовательное вычисление новых углов поворота, по ним находятся положения осей гайки, по положениям осей рисуется на экране сама гайка, и так продолжается по кругу. Углы поворотов (OmegaX, OmegaY, OmegaZ) вычисляются по таким формулам:

  1. DeltaOmegaX = -Dix * OmegaY * OmegaZ * Speed * deltaTime
  2. DeltaOmegaY = -Dix * OmegaX * OmegaZ * Speed * deltaTime
  3. DeltaOmegaZ = -Dix *OmegaX * OmegaY * Speed * deltaTime
  1. OmegaX = OmegaX +DeltaOmegaX
  2. OmegaY = OmegaY +DeltaOmegaY
  3. OmegaZ = OmegaZ +DeltaOmegaZ

Здесь deltaTime - время прошедшее с предыдущей итерации, Speed - это параметр в окошке программы, чтобы просто регулировать скорость работы. Если возникают глюки в работе, то надо сделать его поменьше.

Далее надо повернуть объект на указанные углы. Ротации (то куда повёрнут объект в пространстве) в OpenGL задаются матрицами 3x3. Матрица - это три вектора задающие направления трёх взаимно-перпендикулярные осей объекта. Называются они Right (право, тангаж), Direction (вперёд, крен), Up (вверх, рысканье). Матрица по-умолчанию из этих трёх векторов выглядит так:

  Матрица
 [ 1 0 0 ] - вектор Right
 [ 0 1 0 ] - вектор Direction
 [ 0 0 1 ] - вектор Up

Чтобы повернуть эту матрицу на найденные нами углы (OmegaX, OmegaY, OmegaZ), нужно создать три матрицы вращений вокруг осей X Y и Z и домножить её на них.

Матрицы вращений выглядят так:

              Вокруг оси X:

 [      1             0            0      ] 
 [      0        cos(OmegaX) -sin(OmegaX) ] 
 [      0        sin(OmegaX)  cos(OmegaX) ]

               Вокруг оси Y:

 [  cos(OmegaY)       0       sin(OmegaY) ] 
 [     0              1            0      ] 
 [ -sin(OmegaY)       0       cos(OmegaY) ]

               Вокруг оси Z:

 [  cos(OmegaZ) -sin(OmegaZ)       0      ] 
 [  sin(OmegaZ)  cos(OmegaZ)       1      ] 
 [       0            0            0      ]

Получив три матрицы вращений последовательно умножаем их на матрицу гайки. Делается это по следующим формулам.

  1. ResultMatrix[0, 0] = M1[0, 0] * M2[0, 0] + M1[0, 1] * M2[1, 0] + M1[0, 2] * M2[2, 0]
  2. ResultMatrix[0, 1] = M1[0, 0] * M2[0, 1] + M1[0, 1] * M2[1, 1] + M1[0, 2] * M2[2, 1]
  3. ResultMatrix[0, 2] = M1[0, 0] * M2[0, 2] + M1[0, 1] * M2[1, 2] + M1[0, 2] * M2[2, 2]
  4. ResultMatrix[1, 0] = M1[1, 0] * M2[0, 0] + M1[1, 1] * M2[1, 0] + M1[1, 2] * M2[2, 0]
  5. ResultMatrix[1, 1] = M1[1, 0] * M2[0, 1] + M1[1, 1] * M2[1, 1] + M1[1, 2] * M2[2, 1]
  6. ResultMatrix[1, 2] = M1[1, 0] * M2[0, 2] + M1[1, 1] * M2[1, 2] + M1[1, 2] * M2[2, 2]
  7. ResultMatrix[2, 0] = M1[2, 0] * M2[0, 0] + M1[2, 1] * M2[1, 0] + M1[2, 2] * M2[2, 0]
  8. ResultMatrix[2, 1] = M1[2, 0] * M2[0, 1] + M1[2, 1] * M2[1, 1] + M1[2, 2] * M2[2, 1]
  9. ResultMatrix[2, 2] = M1[2, 0] * M2[0, 2] + M1[2, 1] * M2[1, 2] + M1[2, 2] * M2[2, 2]

Здесь M1 - это исходная матрица, а М2 - матрицы вращений, сначала первая, потом вторая, потом третья. Получив результат, мы получаем новые положения осей гайки в пространстве.

Интересные начальные условия

Если поставить стороны куба (Cube sides) в 10, 10, 1, то характер вращения изменится. Гайка уже не будет резко переворачиваться, а её ось вращения будет периодически плавно переходить из зелёной в красную, и из красной в зелёную, при этом синяя ось будет двигаться строго по кругу, в чём легко убедиться включив в программе опцию (Lines).

Если выставить стороны куба в 10, 1, 1, то будет происходить примерно тоже самое, только меняться местами будут уже не зелёная и красная, а зелёная и синяя оси.

Выставлять скорость слишком большой нельзя, потому, что тогда омеги начнут рости, и когда превысят предел допустимый для вещественных чисел, программа это зафиксирует и остановится. В прочем это можно изменить изменив параметр (Stop on error) c omega на none.

Если интересно посмотреть расчёты, то это можно сделать поставив галочку (Type log) и заглянув на закладку (Log). Отслеживать расчёты удобнее в пошаговом режиме (Step by step running), нажимая на кнопку (Step) для расчёта следующего шага.

3D-crosseyed эффект Объёмное изображение

Суть новомодного эффекта 3D-crosseyed в том, можно увидеть объёмное изображение на плоском мониторе, всего лишь правильно перенастроив собственные глаза.

Включается эффект галочкой "3D-crosseyed" в результате чего на экран выводятся рядом две картинки, одна для правого, другая для левого глаза.

Чтобы увидеть объёмное изображение, нужно развести глаза в стороны, чтобы они смотрели не в одну точку, а каждый на свою картинку. Если так скосить, то картинка раздвоится, и будет видно не две шестерёнки, а четыре, по два у каждого глаза. А далее надо свести эти два изображения так, чтобы вместо четырёх шестерёнок осталось только три, то есть, чтобы две внутренние шестерёнки слились воедино. На них то и нужно смотреть. Тогда перед глазами вдруг неожиданно возникнет объёмный объект, как бы парящий в воздухе, а не просто нарисованный на экране.

Если усилием воли добиться этого от своего зрения не получается, то можно применить хитрость. Взять лист бумаги или использовать просто ладошку и поставить его поперёк экрана так, чтобы он отделял левую шестерёнку от правой. И не давал правому глазу видеть левую шестерёнку, а левому глазу - правую. Далее перед глазами полученные два изображения шестерёнки которы надо свести воедино, и появится полная объёмная 3D-шестерёнка.

Потренироваться не скачивая программу можно на этой большой картинке: djani3.jpg.

Чтобы в программе было удобнее смотреть, рекомендуется закрыть левую панель нажав на клавиу F2.


В этой связи возникает закономерный вопрос: а что же собственно открыл Джанибеков, если подобное поведение объектов легко моделируется по формулам Эйлера восемнадцатого века?

Думаю, заслуга Джанибекова в том, что он обнаружил особые начальные условия (определённые моменты инерции и угловые скорости) при которых тело ведёт себя столь странным образом. Удивительно, что за триста лет существования этих формул никто до него этого не обнаружил. Хотя с другой стороны, на Земле нет невесомости, и на практике найти эффект нельзя, а компьютеров в те далёкие времена или не было вовсе, или были совсем ещё в зачаточном состоянии, а без трёхмерной визуализации найти эффект крайне сложно.

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


traintospace.googlepages.com © 2008 —