Автор: Пользователь скрыл имя, 18 Декабря 2011 в 15:30, курсовая работа
Рассмотрим трехмерную декартовую систему координат, являющуюся правосторонней. Примем соглашение, в соответствии с которым, будем считать положительными такие повороты, при которых (если смотреть с конца полуоси в направлении начала координат) поворот на 90 против часовой стрелки будет переводить одну полуось в другую.
ПОСТАНОВКА ЗАДАЧИ 3
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 3
Трехмерные преобразования 3
Проекции 6
Математическое описание плоских геометрических проекций 11
АЛГОРИТМ РЕШЕНИЯ ЗАДАЧИ 14
ОПИСАНИЕ ПРОГРАММЫ 17
Системные требования 17
Руководство пользователя 17
Листинг программы 19
ЛИТЕРАТУРА 25
1) Одноточечная проекция.
Рисунок 8 - Одноточечная перспектива
2) Двухточечная проекция широко применяется в архитектурном, инженерном и промышленном проектировании.
3)
Трехточечные центральные
Каждую из проекций можно описать матрицей 4´4. Этот способ оказывается удобным, поскольку появляется возможность объединить матрицу проецирования с матрицей преобразования.
Центральная (перспективная) проекция получается путем перспективного преобразования и проецирования на некоторую двухмерную плоскость “наблюдения”. Перспективная проекция на плоскость Z = 0 обеспечивается преобразованием:
[X Y Z H] = [x y z 1]* = [x y 0 (rz+1)]
Рисунок 9 - Вычисление одноточечной перспективы
или x* = = ;
y* = = ;
z* = = ;
где r = ;
Центр проекции находится в точке с координатами. (0,0,-k), плоскость проецирования Z = 0. Соотношения между x, y и x*, y* остается тем же самым. Рассматривая подобные треугольники получим, что
= или x* = ;
аналогично y* = .
Координаты x*, y* являются преобразованными координатами. В перспективном проектировании преобразованное пространство не является евклидовым, т.к. ортогональность осей не сохраняется. При k = ¥ получим аксонометрическое преобразование.
Аффинное преобразование есть комбинация линейных преобразований, сопровождаемых переносом
Последний столбец в обобщенной матрице 4´4 должен быть равен , в этом случае H = 1.
Перспективному преобразованию может предшествовать произвольная последовательность аффинных преобразований. Таким образом, чтобы получить перспективные изображения из произвольной точки наблюдения вначале используют аффинные преобразования, позволяющие сформировать систему координат с осью Z вдоль желаемой линии визирования. Затем применяется перспективное преобразование.
Аналогично перспективное преобразование когда картинная плоскость перпендикулярна оси Z и совпадает с плоскостью Z = 1/r. Центр проекции находится в центре координат.
[X Y Z H] = [x y z 1] * = [x y z (rz+1)] — одноточечная перспектива (точка схода Z).
— точка схода X;
Для того, чтобы создать диметрическую проекцию, необходимо выполнить следующие условие:
sin2φ=sin2θ/(1- sin2θ).
Одним способом выбора sinθ является сокращение оси Z в фиксированное число раз. При этом единичный вектор на оси Z, равный [0 0 1 1], преобразовывается к виду:
[X Y Z H] = [sinφ -cosφsinθ cosφcosθ 1]
или x* = sinφ
y*= - cosφ sinθ.
Таким образом, для диметрической проекции получаем:
φ = 20,705°
θ = 22,208°
Для образования изометрической проекции нужно в одинаковое число раз сократить все три оси. Для этого необходимо, чтобы выполнялось условие:
sin2φ=sin2θ/(1- sin2θ) и sin2φ=(1-2sin2θ)/(1- sin2θ).
Таким образом,
φ = 35,26439°
θ = 45°.
Заданием курсовой работы предусматривается построение каркасного изображения геометрических тел в параллельной и центральной проекциях. Как было показано в теоретической части понятие параллельной проекции не однозначно и необходимо определиться с тем видом проекции, которую мы будем использовать. В данной работе была выбрана аксонометрическая диметрическая проекция.
Алгоритм решения задачи состоит из 3 этапов:
1) Преобразование правой мировой системы координат в левую систему координат наблюдателя. Данное преобразование осуществляется умножение вектора координат точки на матрицу перестановки T.
2) Поворот системы координат таким образом, чтобы положительное направление оси Oz совпадало с направлением вектора, проведенного из точки наблюдения в центр мировой системы координат. Данное преобразование описывается применением двух матриц поворота
Rx(
Ry(
3) Выбор типа проецирования. В зависимости от выбора типа проецирования каждую координату объекта, преобразованную в пунктах 1 и 2 необходимо умножить на матрицы проецирования:
для параллельного проецирования (аксонометрическая диметрическая проекция)
для центрального проецирования
где d - расстояние от проецируемо точки до центра проецирования.
Первые три этапа алгоритма уместно преобразовать в один путем умножения соответствующих матриц и получения результирующей матрицы преобразования. Пусть точка наблюдения задана, как показано на рис 10.
Рисунок 10
Из рисунка видно, что
Тогда, подставив полученные выражения в матрицы поворота и, перемножив их с матрицей перенаправления осей координат, получим результирующую матрицу P, которая преобразует координаты из мировой системы координат в систему координат, в которой точка наблюдения находится на оси Oz, причем направления наблюдения совпадает с положительным направлением этой оси.
Умножив такую матрицу на произвольную точку пространства, мы тем самым учитываем положение точки наблюдения. Далее действуем согласно алгоритму, умножая преобразованные координаты на соответствующую матрицу проецирования.
Для нормальной работы программы необходимо:
Процессор Intel 8086/88 или любые более поздние модели
Операционная система Windows
Монитор любой цветной
Навигации по программе осуществляется с помощью меню пользователя, имеющего простой и понятный интерфейс (а также можно изменять точку обзора непосредственно мышкой) на Рисунке 5.
Рисунок 11 – Панель управления
Первый пункт позволяет в ходе работы динамически менять точку наблюдения, посредством задания ее вещественных координат в мировой системе координат(Рисунок 6).
Рисунок 12 – Точка обзора
Второй пункт меню позволяет менять проецируемое трехмерное геометрическое тело, осуществляя выбор между четырьмя фигурами (Рисунок 7).
Рисунок 13 – Выбор фигуры
Третий пункт позволяет менять проекцию (Рисунок 8).
Рисунок 14– Выбор проекции
Кнопка «показать» непосредственно выводит фигуру на дисплей (Рисунок 9).
Рисунок 15 – Расчет фигуры
Рисунок 16 – Пользовательский вид
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Menus, ImgList,
ComCtrls, mmSystem, Buttons;
type
point3d = record
X,Y,Z:real;
end;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
X_Edit: TEdit;
Y_Edit: TEdit;
Z_Edit: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
GroupBox3: TGroupBox;
Fig_Kub: TRadioButton;
Fig_Pir: TRadioButton;
Fig_Pri: TRadioButton;
Show_Button: TButton;
GroupBox4: TGroupBox;
Par_pro: TRadioButton;
Cen_Pro: TRadioButton;
Display: TImage;
procedure Show_ButtonClick(Sender: TObject);
procedure DisplayMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure DisplayMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure DisplayMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
function sx(x:real):integer;
function sy(y:real):integer;
procedure trans_coord(wcoord, vcoord:point3D; var scoord:point3D);
procedure parallel_projection(point, point_sight:point3D; var x,y:real);
procedure central_projection(point, point_sight:point3D; var x,y:real);
procedure Show_central_projection;
procedure Show_parallel_projection;
{ Private declarations }
public
{ Public declarations }
end;