Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2012, 21:42   #1
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию поворот 3D вектора

есть класс _3Dvector, для простоты все включено в public
Код:
// c++
class _3Dvector
{
public:
    double x, y, z;
//...
};
определены перегруженые операторы:
присваивания, сравнения, сложения и т.д.,
так вот нужны три функции вращения вокруг осей x, y, z.
тут уже пошла математика. в матрицах я не соображаю.
дайте формулу.

может как-то исходить из этого:
x = cos(a);
y = sin(a);


но так много действий будет-
1нормализовать(такая ф-ция есть в классе).
2вычислить угол(используя обратную от выше-приведенной формулы).
3используя вышеприведенную формулу создать еденичный вектор с вычислиным углом + угол поворота.
4умножить получившийся вектор на длинну исходного

Как-то так
SAMOUCHKA вне форума Ответить с цитированием
Старый 15.12.2012, 23:50   #2
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

С матрицами на самом деле нетрудно: http://ru.wikipedia.org/wiki/Матрица_поворота
Перемножаете вектор и составленную матрицу:
x' = x*a11 + y*a12 + z*a13
y' = x*a21 + y*a22 + z*a23
z' = x*a31 + y*a32 + z*a33
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 16.12.2012, 07:02   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а еще можно было вспомнить что при вращении вокруг одной из осей, меняются лишь две координаты, итого имеем поворот на плоскости.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 16.12.2012 в 07:04.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.12.2012, 09:47   #4
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
а еще можно было вспомнить что при вращении вокруг одной из осей, меняются лишь две координаты, итого имеем поворот на плоскости.
Ну да, это понятно. Исходя из этого я могу построить, вектор с заданными углами, по формуле:
x = cos(a);
y = sin(a);
это будут задаватся углы вокруг оси Z. Но мне надо повернуть, готовый вектор на определенный угол.

с матрицами может и не трудно
Цитата:
Перемножаете вектор и составленную матрицу:
x' = x*a11 + y*a12 + z*a13
y' = x*a21 + y*a22 + z*a23
z' = x*a31 + y*a32 + z*a33
Может в этой записи заключена глубокая мудрость. Но для ястности давайте решим задачку(и все станет понятно)

Дано:
вектор V, с координатами
Vx = 5;
Vy = 5;
Vz = 10;

Задача -повернуть данный вектор на 45 градусов вокруг оси Z

Как это решить с помощью матрици
SAMOUCHKA вне форума Ответить с цитированием
Старый 16.12.2012, 10:57   #5
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Цитата:
Как это решить с помощью матрици
В ссылке на википедию даны 3 матрицы для поворота вокруг X,Y и Z. Составьте ту, которая вокруг Z, взяв угол за pi/4. Примените написанную мной формулу.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 16.12.2012, 10:58   #6
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Умножить вектор вот на такую матрицу:
Kostia вне форума Ответить с цитированием
Старый 16.12.2012, 11:09   #7
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
Умножить вектор вот на такую матрицу:
не понимаю я их, эти матрицы

Дано:
вектор V, с координатами
Vx = 5;
Vy = 5;
Vz = 10;

Задача -повернуть данный вектор на 45 градусов вокруг оси Z

как повернуть? последовательность операций!
вот я беру калькулятор и начинаю считать, какие кнопки давить?
SAMOUCHKA вне форума Ответить с цитированием
Старый 16.12.2012, 11:11   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://ru.wikipedia.org/wiki/Поворот...82.D0.B2.D0.B5
в вашем случае Z не меняется
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.12.2012, 11:24   #9
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Цитата:
не понимаю я их, эти матрицы
Цитата:
Задача -повернуть данный вектор на 45 градусов вокруг оси Z

как повернуть? последовательность операций!
ТУТ всего одна операция, умножение вектора на матрицу!
http://matrix.reshish.ru/multiplication.php
http://s40.radikal.ru/i089/1212/0b/1a37f3a59882.png
Ответ: (7.07, 0, 10)

PS: это вращение по часовой стрелке, если нужно против часовой, то вектор выставляете в конце

Последний раз редактировалось Kostia; 16.12.2012 в 11:45.
Kostia вне форума Ответить с цитированием
Старый 16.12.2012, 14:35   #10
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Наверно всем уже надоел

получилось вот так:
Код:
void rotZ(double a); // поворот вокруг оси Z
Код:
void _3Dvector::rotZ(double a)
{
    double _x = x, _y = y;
    x = _x * cos(a) - _y * sin(a);
    y = _x * sin(a) + _y * cos(a);
}
пока не тестировал. Для других осей, сам додумаюсь.

ВСЕМ СПАСИБО
SAMOUCHKA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
дано 3 вектора. определить максимальный чётный элемент каждого вектора и упорядочить по убыванию 3Doleg Паскаль, Turbo Pascal, PascalABC.NET 0 04.12.2012 01:45
Поворот в BitMap Victor1963 Помощь студентам 2 16.11.2011 12:49
поворот изображения на форме (либо поворот файла с картинкой) mystiql Microsoft Office Access 2 21.06.2011 22:03
СИ поворот belii0987 Помощь студентам 2 23.06.2010 10:22
Поворот картинки PAVEL315 Общие вопросы Delphi 3 24.12.2006 12:47