РАСЧЕТНО-ГРАФИЧЕСКОЕ ЗАДАНИЕ 3
Задание. Вывести на экран изображение поверхности z=f(x,y) с удалением невидимых линий.
Варианты заданий. Удаление невидимых линий осуществляется либо с использованием алгоритма плавающего горизонта (M1), либо с использованием метода художника (М2). Рассматривается либо центральная проекция (Р1), либо параллельная проекция (Р2). Поверхность задается одной из следующих формул:
Z1. |
Z4. |
Z7. |
Z2. |
Z5. |
Z8. |
Z3. |
Z6. |
Z9. |
Получаем следующие варианты:
1) M1-P2-Z1 |
6) M1-P2-Z6 |
11) M2-P1-Z2 |
16) M2-P1-Z7 |
21) M2-P2-Z4 |
2) M1-P2-Z2 |
7) M1-P2-Z7 |
12) M2-P1-Z3 |
17) M2-P1-Z8 |
22) M2-P2-Z5 |
3) M1-P2-Z3 |
8) M1-P2-Z8 |
13) M2-P1-Z4 |
18) M2-P2-Z1 |
23) M2-P2-Z6 |
4) M1-P2-Z4 |
9) M1-P2-Z9 |
14) M2-P1-Z5 |
19) M2-P2-Z2 |
24) M2-P2-Z7 |
5) M1-P2-Z5 |
10) M2-P1-Z1 |
15) M2-P1-Z6 |
20) M2-P2-Z3 |
25) M2-P2-Z8 |
ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ
Задание. Вывести на экран изображение поверхности z=sin(x2 +y2) в центральной проекции, используя алгоритм плавающего горизонта для удаления невидимых линий.
Решение. Точки (x,y,z) вычерчиваемой части поверхности принадлежат некоторому прямоугольному параллелепипеду xmin £ x £ xmax, ymin £ y £ ymax, zmin £ z £ zmax. Точка наблюдения (xV ,yV ,zV) удовлетворяет условиям xV ³ xmax, yV ³ ymax, zV ³ zmax. Функции ex и ey переводят мировые координаты (x,y,z) в координаты проекции (x¢,y¢). Плоскость проекции имеет единичный вектор нормали u = (cosa, sina, 0) и находится на расстоянии d от точки (xV, yV ,zV) (см. рассмотренный ранее пример 3.3 на центральную проекцию). Координаты центральной проекции вычисляются по формулам:
x'=-d((x-xV)(-sina)+(y-yV)cosa)/((x-xV)cosa+(y-yV)sina);
y'=-d(z-zV)/((x-xV)cosa+(y-yV)sina).
Вычислим наибольшие и наименьшие координаты отображаемого параллелепипеда
exmin = ex(xmax ,ymin ,zmin), exmax = ex(xmin, ymax, zmax),
eymin = ey(xmax, ymax, zmin), eymax = ey(xmin, ymin, zmax).
Прямоугольник exmin £ ex £ exmax, eymin £ ey £ eymax будет окном, отображаемым на область вывода, состоящую из точек, имеющих целые координаты
X = (ex-exmin)*getmaxx()/(exmax-exmin),
Y = (ey-eymin)*getmaxy()/(eymax-eymin).
Рассматривается прямоугольная сетка в плоскости Oxy с шагом hx = (xmax-xmin)/nx по x, и hy = (ymax -ymin )/ny - по y .
Каждому прямоугольнику
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.