Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.10.2015
Сообщений: 44
1

Построение ортогональной проекции модели трехмерного объекта

14.10.2015, 20:12. Показов 4022. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Построить ортогональную проекцию модели трехмерного объекта (Правильная усеченная 3-х угольная пирамида, боковые ребра равны стороне нижнего основания). Ну очень нужно. Уже какой день пытаюсь нарисовать и ничего не получается, пробовала просто нарисовать отдельно по линиям, но во первых совсем не то получается и во вторых знаю, что можно как-то сразу вбить координаты точек и их соединить. Прочла методичку по этой теме, но так как всего лишь 3 день изучаю Delphi не пойму, в методичке прописано, что с помощью массива типа T3DPoint нужно прописывать координаты типо вот так:
Delphi
1
2
3
var
w: array [1..8] of T3DPoint; //мировые (world) координаты вершин
v: array [1..8] of TPoint; //видовые (view) координаты вершин
Для примера зададим координаты вершин куба с центром в начале координат:
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
w[1].x := -50;
 w[1].y := -50;
 w[1].z := -50;
 w[2].x := 50;
 w[2].y := -50;
 w[2].z := -50;
 w[3].x := 50;
 w[3].y := 50;
 w[3].z := -50;
 w[4].x := -50;
 w[4].y := 50;
 w[4].z := -50;
 w[5].x := -50;
 w[5].y := -50;
 w[5].z := 50;
 w[6].x := 50;
 w[6].y := -50;
 w[6].z := 50;
 w[7].x := 50;
 w[7].y := 50;
 w[7].z := 50;
 w[8].x := -50;
 w[8].y := 50;
 w[8].z := 50;
Далее необходимо перевести координаты в видовую систему координат, воспользовавшись
матрицей V. Данная процедура выглядит следующим образом:
Delphi
1
2
3
4
5
6
7
8
procedure ViewTransformation;
for i := 1 to 8 Do
begin
v[i].x := Round(w[i].x*(-sin(teta)) + w[i].y*(cos(teta)))+Form1.ClientWidth div 2;
v[i].y := Round(
w[i].x*(-cos(phi) * cos(teta)) - w[i].y*( cos(phi) * sin(teta)) +
w[i].z*(sin(phi))) + Form1.ClientHeight div 2;
end;
Процедура рисования граней куба состоит в соединении между собой соответствующих
вершин ребрами. Строить куб необходимо по экранным координатам, которые сосчитаны в
процедуре ViewTransformation:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure DrawCube;
Line(v[1],v[2]);
Line(v[2],v[3]);
Line(v[3],v[4]);
Line(v[4],v[1]);
Line(v[5],v[6]);
Line(v[6],v[7]);
Line(v[7],v[8]);
Line(v[8],v[5]);
Line(v[1],v[5]);
Line(v[2],v[6]);
Line(v[3],v[7]);
Line(v[4],v[8]);
И пробовала воспроизвести этот пример, но ничего не выходит. Не понятно где прописывается T3DPoint?

Подскажите хотя бы на словах как мне это все организовать. Пожалуйста!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2015, 20:12
Ответы с готовыми решениями:

Получить изображение ортогональной проекции объекта
Люди прошу помочь, в этой теме никак не разберусь. 1) Получить изображение ортогональной проекции...

Получить изображение ортогональной проекции объекта
1) Получить изображение ортогональной проекции объекта: Правильная 4-х угольная пирамида, все ребра...

Построить ортогональную проекцию модели трехмерного объекта
Пожалуйста помогите построить ортогональную проекцию модели трехмерного объекта Объект правильная...

Построение экранного отображения каркасной модели трехмерного объекта
помогите пожалуйста исправить ошибки в лабе Задание Лабораторная работа №5 ПОСТРОЕНИЕ...

23
0 / 0 / 0
Регистрация: 13.10.2015
Сообщений: 44
16.10.2015, 14:46  [ТС] 21
Author24 — интернет-сервис помощи студентам
qwertehok, Спасибо сейчас попробую.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.10.2015, 15:14 22
Лучший ответ Сообщение было отмечено Marina232 как решение

Решение

На примере программы с кубом добавьте в
Delphi
1
2
procedure TForm1.FormCreate(Sender: TObject);
keypreview:=true;//разрешим форме реагировать на нажатие клавиш
и процедуру
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case key of//клавиши стрелка влево и вправо
VK_Left:teta:=teta+pi/10; //поворот против часовой стрелки
VK_Right:teta:=teta-pi/10; //по часовой стрелке
end;
ViewTransformation;
Repaint
end;
Добавлено через 2 минуты
В задании к лабе 2 речь идет о вращении, можете еще добавить стрелку вверх и вниз, там менять phi

Добавлено через 2 минуты
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case key of//клавиши стрелка влево и вправо
VK_Left:teta:=teta+pi/10; //поворот против часовой стрелки
VK_Right:teta:=teta-pi/10; //по часовой стрелке
VK_Up:phi:=phi-pi/10;
VK_Down:phi:=phi+pi/10;
end;
ViewTransformation;
Repaint
end;
1
0 / 0 / 0
Регистрация: 13.10.2015
Сообщений: 44
16.10.2015, 15:25  [ТС] 23
Puporev, Спасибо!!! А вот такой вопросик, а этот объект можно залить каким-нибудь цветом (это я знаю как делать просто спросить)?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.10.2015, 16:35 24
Чтобы залить нужно каждую грань описать как динамический массив точек и рисовать процедурой polygon, а не линиями.

Добавлено через 43 минуты
Только там нужно определть видима грань или нет, сначала рисуют невидимые, потом видимые, короче морока.
0
16.10.2015, 16:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2015, 16:35
Помогаю со студенческими работами здесь

Построение трехмерного объекта и анимация поворота
Построить четырехугольную пирамиду. Поворот: (относительно оси Оz) Пример: Поворот куба...

Матрица ортогональной проекции
Есть три друга: QMatrix4x4 mProjectionMatrix; QMatrix4x4 mViewMatrix; QMatrix4x4...

Свойство ортогональной проекции и составляющей
{pr}_{u}({ort}_{u}a)=0, V=U \bigoplus {U}^{\bot} pr-ортогональная проекция a на U,...

Как мне масштабировать сцену, если пользователь находится в ортогональной проекции glOrtho()?
Добрый день. Мой проект построен на том, что у пользователя есть возможность быть как в 2D так и в...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru