Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Norby
66 / 66 / 5
Регистрация: 12.03.2008
Сообщений: 392

Поворот вокруг вектора.

15.04.2011, 04:42. Показов 1020. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Поделитесь исходником функции поворота точки вокруг вектора. Написал так по книжке "Д.Роджерс, Дж.Адамс Математические основы машинной графики":
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
void rotateP3D(double p[4], double v0[4], double v1[4], double angle, double res[4]){
    
    double d = sqrt(pow(v1[1], 2) + pow(v1[2], 2));
 
    double T[4][4];
    double T_1[4][4];
    double Rx[4][4];
    double Ry[4][4];
    double Rv[4][4];
    double Rx_1[4][4];
    double Ry_1[4][4];
    double M[4][4];
    double M_1[4][4];
    double R[4][4];
 
    double cos_a = v1[2] / d;
    double cos_b = d;   //Тут вообще непонятно, а если d>1 ???
    double a = acos(cos_a);
    double b = acos(cos_b);
 
           //makeEmatr4 создает единичную матрицу 4х4
    makeEmatr4(T);
    makeEmatr4(T_1);
    makeEmatr4(Rx);
    makeEmatr4(Ry);
    makeEmatr4(Rv);
    makeEmatr4(Rx_1);
    makeEmatr4(Ry_1);   
 
    Rx[1][1] = cos(a);      Rx[1][2] = sin(a);      Rx[2][1] = -sin(a);     Rx[2][2] = cos(a);
    Ry[0][0] = cos(-b);     Ry[0][2] = -sin(-b);    Ry[2][0] = sin(-b);     Ry[2][2] = cos(-b);
    Rv[0][0] = cos(angle);  Rv[0][1] = sin(angle);  Rv[1][0] = -sin(angle); Rv[1][1] = cos(angle);
    Rx_1[1][1] = cos(-a);   Rx_1[1][2] = sin(-a);   Rx_1[2][1] = -sin(-a);  Rx_1[2][2] = cos(-a);
    Ry_1[0][0] = cos(b);    Ry_1[0][2] = -sin(b);   Ry_1[2][0] = sin(b);    Ry_1[2][2] = cos(b);
    
    T[3][0] = -v0[0]; T[3][1] = -v0[1]; T[3][2] = -v0[2];
    T_1[3][0] = v0[0]; T_1[3][1] = v0[1]; T_1[3][2] = v0[2];
 
           //matr4Mul перемножает матрицы 4х4
    matr4Mul(T, Rx, M);
    matr4Mul(M, Ry, M);
    matr4Mul(Ry_1, Rx_1, M_1);
    matr4Mul(M_1, T_1, M_1);
    matr4Mul(M, Rv, R);
    matr4Mul(R, M_1, R);
 
           //VM4Mul умножает вектор на матрицу 4х4
    VM4Mul(p,R,res);
}
Работает не правильно.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.04.2011, 04:42
Ответы с готовыми решениями:

поворот вокруг начальной точки на угол
Не могу найти рабочую формулу. Координаты должны быть целыми значениями. Такое не работает Sinus = Sin(Angle); Cosinus =...

А есть ли здесь функция поворот вектора вокруг вектора?
Задача пересчитать вектор с учётом поворота. Есть шар, заменяющий геоид, координаты камеры, нормаль в этой точке, она же вектор вверх и...

Поворот вокруг оси
Верчу вокруг оси X отрезок на 45 градусов (~0.78539816339744830961566084581988 радиан) f = 0.78539816339744830961566084581988; y =...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2011, 04:42
Помогаю со студенческими работами здесь

Поворот вокруг точки
всем доброго времени суток, целый час ломал голову как сделать поворот вокруг точки, а не вокруг начла координат, чего я только не...

Поворот куба сначала вокруг оси y с.к. экрана потом вокруг оси x с.к. экрана
Предыстория: Я пишу 3D игру и там соответственно нужно производить поворот тела в пространстве. нужно делать 2 поворота по горизонтали и...

Поворот прямой вокруг оси
всем привет, помогите, пожалуйста решить. Во что перейдет прямая, заданная вектором (1,2,3) и начальной точной (3,2,1) при ее повороте на...

Поворот изображения вокруг точки
Мне нужно повернуть изображение вокруг точки с координатами (40, 60). Стандартные функции этого делать не позволяют и поворачивают...

Поворот фигуры вокруг оси
Здравствуйте.Снова нужна помощь.Вот отрисовал треугольник.Нужно четыре цикла repeat чтобы полностью повернуть его.Обяъясните пожалуйста...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru