0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 31

Вращение объекта вокруг произвольной оси

18.11.2017, 11:33. Показов 2381. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно ввести X,Y,Z точки, через которую проходит ось. Если заданная ось совпадает с осью координат, то вращение объекта происходит верно, но если заданная ось не совпадает с осью координат (например, проходит через точку {1;1;0}), то вращение происходит так же верно и при этом объект увеличивается в размере. Не понимаю, почему увеличивается.

Delphi
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//Поворот воркуг прямой
 procedure TForm1.ButtonTurnClick(Sender: TObject);
 begin
 turn:=StrToFloat(EditAngle.Text);
 x:= StrToFloat(EditX.Text);
 y:= StrToFloat(EditY.Text);
 z:= StrToFloat(EditZ.Text);
 if ((z=0) and (y=0)) and (x=0) then
 raise Exception.Create('Enter the vector');
 
 //Нормирование вектора
 x:=x/sqrt(x*x+y*y+z*z);
 y:=y/sqrt(x*x+y*y+z*z);
 z:=z/sqrt(x*x+y*y+z*z);
 
 d:= sqrt(y*y+z*z);
 
 if ((y=0) and (z=0)) then
 begin
   cosa:=1;
   sina:=0;
 end
 else
 begin
    cosa:=z/d;
    sina:=y/d;
 end;
 
 //Поворот вокруг X
 createturnArrX(turnArr,cosa,sina );
 multiplicationOfmatrix(let,turnArr);
 
 //Поворот вокруг Y
 createturnArrY(turnArr,x,d);
 multiplicationOfmatrix(let,turnArr);
 
 //Поворот вокруг Z
 createturnArrZ(turnArr,turn);
 multiplicationOfmatrix(let,turnArr);
 
 //Обратный поворот вокруг Y
 createturnArrY(turnArr,-x,d);
 multiplicationOfmatrix(let,turnArr);
 
 //Обратный поворот вокруг X
 createturnArrX(turnArr,cosa,-sina );
 multiplicationOfmatrix(let,turnArr);
 
 
 showLetter(let, EDGES, xdefsetting,ydefsetting, ImageScreen);
 ImageScreen.Canvas.MoveTo(0+xdefsetting,0+ydefsetting);
 ImageScreen.Canvas.LineTo(round(x*1000+xdefsetting), round(y*1000+ydefsetting));
 end;
 
 
//Матрица вращения X
procedure createturnArrX(var arr:transformation; cosa,sina:real );
begin
  arr[1,1]:=1;  arr[1,2]:=0;      arr[1,3]:=0;      arr[1,4]:=0;
 
  arr[2,1]:=0;  arr[2,2]:=cosa;   arr[2,3]:=-sina;  arr[2,4]:=0;
 
  arr[3,1]:=0;  arr[3,2]:=sina;   arr[3,3]:=cosa;   arr[3,4]:=0;
 
  arr[4,1]:=0;  arr[4,2]:=0;      arr[4,3]:=0;      arr[4,4]:=1;
 
end;
 
//Матрица вращения Y
procedure createturnArrY(var arr:transformation; x,d:real );
begin
  arr[1,1]:=d;  arr[1,2]:=0;  arr[1,3]:=-x;  arr[1,4]:=0;
 
  arr[2,1]:=0;  arr[2,2]:=1;  arr[2,3]:=0;   arr[2,4]:=0;
 
  arr[3,1]:=x;  arr[3,2]:=0;  arr[3,3]:=d;   arr[3,4]:=0;
 
  arr[4,1]:=0;  arr[4,2]:=0;  arr[4,3]:=0;   arr[4,4]:=1;
 
end;
 
//Матрица вращения Z
procedure createturnArrZ(var arr:transformation; deg:real );
begin
  arr[1,1]:=cos(deg*Pi/180);   arr[1,2]:=-sin(deg*Pi/180); arr[1,3]:=0;  arr[1,4]:=0;
 
  arr[2,1]:=sin(deg*Pi/180);   arr[2,2]:=cos(deg*Pi/180);  arr[2,3]:=0;  arr[2,4]:=0;
 
  arr[3,1]:=0;                         arr[3,2]:=0;                       arr[3,3]:=1;  arr[3,4]:=0;
 
  arr[4,1]:=0;                         arr[4,2]:=0;                       arr[4,3]:=0;  arr[4,4]:=1;
 
end;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.11.2017, 11:33
Ответы с готовыми решениями:

Как реализовать вращение треугольника вокруг оси на компоненте image?
Использую формулу X := X*Cos(a) - Y*Sin(a); Y := X*Sin(a) + Y*Cos(a); для каждой точки. В итоге вращает как то криво. или...

Вращение вокруг центра
Подскажите пожалуйста! Вот есть фигуры, они вращаются вокруг осей x, y, z. а как сделать, что бы они вращались вокруг центра?

Вращение вокруг центра масс фигуры
Ребят, дана фигура в коде, надо изобразить вращение вокруг центра масс этой фигуры (середины отрезка), помогите unit Unit1; ...

2
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 31
20.11.2017, 20:13  [ТС]
Ошибку нашел, больше не актуально
0
 Аватар для карандаш ТМ
2 / 2 / 0
Регистрация: 13.11.2017
Сообщений: 80
21.11.2017, 08:01
где матрица let и где функция multiplicationOfmatrix();?

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

Вращение точок вокруг одной точки
Здравствуйте! Помогите пожалуйста составить следующую программу : 3 точки должны вращатся вокруг точки A(x, y), которая является центром...

Вращение Bitmap вокруг точки. Расчеты и отрисовка
Всем привет! Давно ломаю голову над этим механизмом, а сам написать код не смог. Смысл вот в чем: Есть Bitmap, который отрисовывается на...

Вращение круга вокруг заданной точки на заданный угол
алгоритм вычисления???

Перемещение и поворот вокруг оси картинки на форме
Я начинающий, вошел в стопор, прошу помощи! Стоит задача сделать следующее: Есть картинка Pic1 и Pic2. Pic2 находится над Pic1 и имеет...

Как сделать, чтобы прямоугольник вращался вокруг своей оси?
Как сделать, чтобы прямоугольник вращался вокруг своей оси? Помогите пожалуйста!


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Непрерывная интеграция для пакета Python
Mr. Docker 22.06.2025
Было 4 часа утра пятницы, когда я выпустил новую версию нашей внутренней библиотеки для обработки данных. Релиз 0. 5. 2 содержал небольшой фикс для обработки дат в ISO формате, что может пойти не так?. . .
Продвинутый ETL на C# из OLTP БД в хранилище
stackOverflow 22.06.2025
Работая в сфере корпоративной аналитики, я постоянно сталкиваюсь с одним и тем же - нужны чистые, структурированные и, главное, свежие данные. Без них современные аналитические системы, машинное. . .
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru