logo search
Компьютерная графика / МАШ_ГРАФИКА

§3. Построение проективных векторных изображений трёхмерных объектов

Как отмечено в § 6.4, с точки зрения упрощения линейных преобразований объектов, их геометрию необходимо зада-вать в виде:

1) набора однородных координат точек

P = {P0 ,P1 ,…,Pn},

гдеPi = (xi , yi , zi ,1),

(n+1) - общее число точек и

2) списка пар номеров точек, которые соединяются между собой отрезками,

L={I0,I1,…,Im},

где Ij=(ij0,ij1); ij0, ij1 - номера конечных точек линииjв набореPi ;

(m+1)– общее число линий.

При выполнении совокупности линейных и проективных преобразований необходимо:

I.Определить результирующую матрицу преобразований.Допустим, наборы (списки)PиL, описывающие геомет-рию объекта заданы. Если необходимо выполнить несколь-ко линейных и проективных преобразованийT1,…,Tkобъек-та, то необходимо

а) вначале найти матрицы элементарных преобразований

MT1 , MT2 ,… , MTk ; .

б) затем - результирующую матрицу преобразования в виде их произведения

MT = MTk *…* MT2 MT1 .

146

Замечание. Порядок матриц в произведении – обратный порядку выполнения преобразований.

II. В цикле поjот0доnумножить векторы однородных координат точекPi (i=0,1,…, n)на матрицуМТи занести преобразованные координаты точек в новый массив

Pn={Pn0 ,Pn1, … ,Pnn } .

III.Если необходимо (в случае нелинейных преобразований) – нормировать координаты точекPni по четвёртой компоненте.

IV. Выделить из координат Pni двумерные компоненты, необходимые для построения проекции.

V. По спискуLи списку двумерных координат точек по-строить искомое векторное изображение проекции объекта.

Пример.Задан куб (Рис. 7.1) с вершинами в точкахА(0,0,0), В(0,100,0), С(100,100,0), D(100,0,0), E(0,0,100), F(0,100,100), G(100,100,100), H(100,0,100).

Требуется последовательно выполнить следующие элемен-тарные преобразования каркасной модели объекта:

1) поворот вокруг оси Х на угол300;

2) поворот вокруг оси Yна угол600;

3) поворот вокруг оси Zна угол450;

4) сдвиг на вектор (200, 100 , 50);

5) ортогональную проекцию на плоскость z = 0.

Решениезадачи на языкеAutolispприведено в функцииkub. Алгоритм её работы следующий:

1. Строится список sppкоординат точек кубаA, B, C, D, E, F, G, H.

147

2. Строится список пар номеров spl = ( l0, l1,…, l11) пар вер-шин, образующих линии-рёбра куба.

3. С помощью стандартных функций rx, ry, rz, s, orzстроятся матрицы элементарных преобразованийmrx, mry, mrz, ms ,morz , осуществляющих преобразования 1) -5).

С помощью функции векторной алгебры умножения матриц mmопределяется итоговая матрица преобразованияmrez.

  1. С помощью функции векторной алгебры умножения матрицы на вектор mv определяются новые координаты точек (списокsppn).

6. По списку линий splи спискуsppnкоординат строятся:

a) двухмерные проективные координаты проекций вершин куба(xi,yi);

б) векторы – линии требуемой проекции модели.

Текст функции kub

(defunc:kub()

;Формирование списка однородных коор-т точек куба (spp)

(setq a (list 0 0 0 1) b (list 100 0 0 1) c (list 100 100 0 1) d (list 0 100 0 1) e (list 0 0 100 1) f (list 100 0 100 1) g (list 100 100 100 1) h (list 100 0 100 1) spp (list a b c d e f g h ))

;Формирование списка пар точек в линиях (spl)

(setq l0 (list 0 1) l1 (list 1 2) l2 (list 2 3) l3 (list 3 0) l4 (list 4 5) l5 (list 5 6) l6 (list 6 7) l7 (list 7 4) l8 (list 0 4) l9 (list 1 5) l10 (list 2 6) l11 (list 3 7)spl (list l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 l10 l11 ))

;Расчет матриц элементарных преобразований (mrx,mry,mrz,ms,morz)

(rx (/ pi 6)) (ry (/ pi 3)) (rx (/ pi 4)) (s 200. 100.50.) (orz0)

;Расчет итоговой матрицы сложного преобразования (mrеz)

(mm mry mrx 4) (mm mrz mrez 4) (mm ms mrez 4) (mm morz mrez 4)

;Пересчет координат точек (из массива spp в массив sppn)

148

(setq i 8) (repeat 8 (progn

(setq i (- i 1)) pt (nth i spp)

(mv mrez pt 4) (setq sppn (cons vec sppn))

))

;Вычерчивание линий (пары номеров точек –из массива spl ,

; новые координаты – из массива sppn

setq i 12) (repeat 12 (progn

(setq i (- i 1)) nomp (nth i spl)

; В цикле - извлечение полных однородных координат ;(x,y,z,1) краевых точек линий и формирование их 2-мерных ;координат (x,y)

(setq p1 (nth (nth 0 nomp) sppn) p2 (nth (nth 1 nomp) sppn))

(setq pt1 (list (nth 0 p1) (nth 1 p1)) pt2 (list (nth 0 p2) (nth 1 p2))

; В цикле - вычерчивание линий

(command «line» pt1 pt2 «»)

)) )

В результате выполнения данной функции получаем сле-дующее графическое изображение куба (Рис. 7.5):

Задачи.

I. По заданному типу геометрического объекта и набору его вершин:

а) построить каркасную модель (при помощи списков однородных координат вершин и пар номеров вершин, отражающих все рёбра);

б) построить матрицы всех элементарных преобразований и итоговую мастрицу сложного преобразования;

в) найти проективные координаты вершин объекта и построить его заданную проекцию.

1. Задана пирамида с вершинами А(300,100,0), B(200,100,0), C(200,200,0), D(300,200,0), Е(250,150,200).

Требуется: а) повернуть её вокруг ребра ADна угол600; б) сдвинуть на вектор(-200,100,200); в) построить изомет-рическую проекцию.

149

Рис.7.5

2. Задана пирамида с вершинами А(100,100,100), B(200, 130, 100), C(120,200,100), D(100,100,200).

Требуется: а) повернуть её вокруг ребра ADна угол1500; б) построить угловую пространственную проекцию с точками схода(500,0,0), (0,0,500).

3. Задана пирамида с вершинами А(50,50,0), B(50, 100, 0), C(100, 100, 0), D(100,50,0), E(75,75,100).

Требуется: а) сдвинуть её на вектор (200,500,300); б) по-строить диметрическую проекцию с величиной коэффици-ентаk = 1/4.

4. Задана пирамида с вершинами А(60,60,100), B(60, 120,120), C(100,90,140), D(80,80,200).

150

Требуется: а) повернуть её вокруг оси, проходящей через точки Е=(0,0,0)иF=(0,100,0), на угол1200; б) построить изометрическую проекцию.

5. Задана пирамида с вершинами А(100,100,100), B(200, 100, 100), C(100,200,100), D(100,100,200).

Требуется: а) повернуть её на угол 1200 вокруг ребраАD; б) сдвинуть на вектор(200,100,300); в) построить димет-рическую проекцию с величиной коэффициентаk = 0,2.

6. Задана призма с вершинами А(20,30,0), B(120,30,0), C(70, 100, 0), D(20,30,100), Е(120,30,100), F(70,100,100).Требуется:а) повернуть её вокруг ребраCFна угол1050; б) построить угловую перспективу с точками схода(200,0,0)и(0,400,0).

7. Задана призма с вершинами А(50,50,0), B(50,150,0), C(150,50,0), D(50,50,100), Е(50,150,100), F(150,50,100).

Требуется: а) повернуть её вокруг ребра AB на угол450; б) повернуть вокруг осиХ на угол600; в) сдвинуть на вектор(200,100,50); г) ортогонально спроектировать на плоскостьZ=0.

8. Задана призма с вершинами А(100,0,0), B(0,100,0), C(100, 100,0), D(100,0,200), Е(0,100,200), F(100,100,200).

Требуется: а) повернуть её вокруг ребра CFна угол1500; б) повернуть вокруг осиX на угол300; в) построить диметрическую проекцию с коэффициентомk=1/3.

9. Задан параллелепипед с вершинами А(0,0,0), B(0,2,0), C(1, 2,0), D(1,0,0), Е(0,0,3), F(0,2,3), G(1,2,3), H(1,0,3).

Требуется: а) масштабно увеличить его с коэффициентами (50, 60, 40); б) сдвинуть на вектор(100,50,200);в) построить ортогональную проекцию на плоскостьZ=0; г) построить

152