Просмотр полной версии : Преобразование 3D поворта
Как поворот вокруг произвольной оси разложить на последовательные повороты по осям Ох, Оу, Oz?
Или как абсолютные повороты по осям Ох, Оу, Оz представить в виде серии последовательных поворотов.
Хотелось бы почитать теорию, не могу сформулировать правильный запрос гуглу .....
То что нахожу - базовые понятия-отрывки.
http://etcs.ru/portfolio/bricks.fla
Там шесть строк. Ничего не подскажу, потому что имел дело с этим очень давно и сейчас ничего не помню.
Это как раз последовательный поворот по трём осям, последовательное преобразование по трём матрицам, это мы умеем :):
//цитата исходника __etc
y = o.y0*Math.cos(angleZ)+o.x0*Math.sin(angleZ);
x = o.x0*Math.cos(angleZ)-o.y0*Math.sin(angleZ);
// y rotate
z = o.z0*Math.cos(angleY)-x*Math.sin(angleY);
x = x*Math.cos(angleY)+o.z0*Math.sin(angleY);
// x rotate
oy = y;
y = y*Math.cos(angleX)-z*Math.sin(angleX);
z = oy*Math.sin(angleX)+z*Math.cos(angleX);
Было бы прекрасно разложить любой произвольный поворот на три последовательных, применив к ним код аналогичный твоему.
Это тебе надо сделать преобразование координатных плоскостей, в смысле повернуть сами оси. Только, я мозг напрячь не могу, новый год вроде недавно был %)
Это тебе надо сделать преобразование координатных плоскостей, в смысле повернуть сами оси. Только, я мозг напрячь не могу, новый год вроде недавно был %)
Ну да, так можно сделать поворот вокруг произвольно оси....
Но как меня это приблизит к разложению поворота на 3 составляющих ?
Серия последовательных поворотов точки зависит от порядка применения поворотв. Допустим
поворот по Ox = 0.5;
поворот по Оу = 0,2;
поворот по Oz = 0.6;
Если будем поворачивать одну точку последовательно по осям Ох, Оу, Оz, а потом попробуем повернуть другую точку на эти же углы, но в последовательности Оz, Оу, Ох - то получим точки в разных местах.
Т.е. здесь всё зависти от порядка применения поворотов. Я хочу от этого порядка избавиться, вводя абсолютные значения поворотов относительно осей Ох, Оу, Oz.
Мммм, надо тебя направить в сторону матричных преобразований поворота осей XYZ.
И ещё, как ты представляешь себе ось, заданную в пространстве не с помощью трех углов? XYZ? Если да, то синусы и косинусы рулят :))
... от этого порядка избавиться, вводя абсолютные значения поворотов относительно осей Ох, Оу, Oz.
На сегодняшний день теория утверждает, что если АХ(.),АУ(.),АЗ(.) - матрицы поворотов вокруг координатных осей, то любой поворот можно представить в виде А=АХ(ф1)*АУ(ф2)*АЗ(ф3) и данное уравнение имеет шесть решений ( на интервале от 0 до 2П ). При другом порядке поворотов вновь 6 решений и т.д.
Более того любой поворот можно разложить на повороты вокруг только двух любых осей,
например А=АЗ(е1)*АУ(е2)*АЗ(е3) , где е1,е2,е3 так называемые углы Эйлера.
===
По видимому задача нахождения "абсолютных поворотов" неразрешима.
Думаю тебе это (http://flasher.ru/data/src/3360/Cube.zip) поможет. Тоже с этим столкнулся, и вот кое-что нашел.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.