- 4.2 Побудова тривимірних графіків Графік поверхні (тривимірний або 3D-графік) - це графік, положення...
- 4.2.2 Побудова графіків поверхонь, заданих параметрично
4.2 Побудова тривимірних графіків
Графік поверхні (тривимірний або 3D-графік) - це графік, положення точки в якому визначається значеннями трьох координат.
4.2.1 Побудова графіків поверхонь
Дамо визначення прямокутної (або декартовій) системи координат в просторі.
Мал.4.16.
Приклад використання функції bar (x, y)
Прямокутна система координат в просторі складається з заданою фіксованою точки простору, званої початком координат, і трьох перпендикулярних прямих простору і , Які не лежать в одній площині і перетинаються на початку координат, - їх називають координатними осями ( - вісь абсцис, - вісь ординат, - вісь аплікат). положення точки в просторовій системі координат визначається значенням трьох координат і позначається . Три площини, що містять пари координатних осей, називаються координатними площинами і .
величина називається функцією двох величин і , Якщо кожній парі чисел, які можуть бути значеннями змінних і , Відповідає одне або кілька певних значень величини . При цьому змінні і називають аргументами функції . Пари тих чисел, які можуть бути значеннями аргументів , функції , В сукупності складають область визначення цієї функції.
Для побудови графіка двох змінних необхідно виконати наступні дії.
- Сформувати в області побудови графіка прямокутну сітку, проводячи прямі, паралельні осях .
- обчислити значення у всіх вузлах сітки.
- Звернутися до функції побудови поверхні, передаючи їй як параметри сітку і матрицю значень у вузлах сітки.
Для формування прямокутної сітки в Octave є функція . Розглянемо побудову тривимірного графіка на наступному прикладі.
Приклад 4.14. Побудувати графік функції .
Для формування сітки скористаємося функцією .
>>> [xy] = meshgrid (-2: 2, -3: 3) x = -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 - 2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 y = -3 -3 -3 -3 -3 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Після формування сітки обчислимо значення функції у всіх вузлових точках
>>> z = 3 * x. * X-2 * sin (y). ^ 2 z = 11.96017 2.96017 -0.03983 2.96017 11.96017 10.34636 1.34636 -1.65364 1.34636 10.34636 10.58385 1.58385 -1.41615 1.58385 10.58385 12.00000 3.00000 0.00000 3.00000 12.00000 10.58385 1.58385 -1.41615 1.58385 10.58385 10.34636 1.34636 -1.65364 1.34636 10.34636 11.96017 2.96017 -0.03983 2.96017 11.96017 Лістинг.
на Мал. 4.17. зображено графік функції:
Мал.4.17.
Графік функції
Для побудови каркасного графіка слід звернутися до функції ;
Після це буде створено графічне вікно з тривимірним графіком (див. Мал. 4.17 ). Як видно, отриманий графік вийшов грубим, для отримання менш грубого графіка слід сітку зробити більш щільною (див. лістинг 4.14 і Мал. 4.18 ).
[Xy] = meshgrid (- 2: 0.1: 2, -3: 0.1: 3); z = 3 * x. * x-2 * sin (y). ^ 2 mesh (x, y, z); Лістинг 4.14. Побудова графіка поверхні (приклад 4.14).
Будь тривимірний графік можна обертати, використовуючи мишку.
Для побудови поверхонь, крім функції побудови каркасного графіка, є функція , Яка будує каркасну поверхню, заливаючи її кожну клітину кольором, який залежить від значення функції в вузлах сітки.
Приклад 4.15. З використанням функції побудувати графік функції .
В лістингу 4.15 представлено рішення задачі, а на Мал. 4.19 зображений вийшов графік.
на Мал. 4.18. зображено графік функції:
Мал.4.18.
Графік функції з щільною сіткою [xy] = meshgrid (-2: 0.2: 2, 0: 0.2: 4); z = sqrt (sin (x). ^ 2 + cos (y). ^ 2); surf (x, y, z); Лістинг 4.15. Побудова графіка поверхні (приклад 4.15).
У Octave можна побудувати графіки двох поверхонь в одній системі координат, для цього, як і для плоских графіків, слід використовувати команду , Яка блокує створення другого нового вікна при виконанні команд або .
Приклад 4.16. Побудувати в одній системі координат графіки функцій .
Рішення завдання з використанням функції представлено в лістингу 4.16 , Отриманий графік зображений на Мал. 4.20 .
h = figure (); [Xy] = meshgrid (-2: 0.1: 2, -3: 0.1: 3); z = 2 * x. ^ 2 + 3 * y. ^ 4-1; z1 = -2 * x. ^ 2-3 * y. ^ 4-1; surf (x, y, z); hold on surf (x, y, z1); Лістинг 4.16. Побудова двох графіків одночасно (приклад 4.16).
на Мал. 4.19. зображено графік функції:
Мал.4.19.
Графік функції
Мал. 4.20. Зображення двох поверхонь в одній системі координат з використанням функції surf
Мал. 4.21. Зображення двох поверхонь в одній системі координат з використанням функції mesh
Побудова поверхні за допомогою функції можна здійснити аналогічно (див. лістинг 4.17 ), Графіки функцій - можна побачити на Мал. 4.21 .
h = figure (); [Xy] = meshgrid (-2: 0.1: 2, -3: 0.1: 3); z = 2 * x. ^ 2 + 3 * y. ^ 4-1; z1 = -2 * x. ^ 2-3 * y. ^ 4-1; mesh (x, y, z); hold on mesh (x, y, z1); Лістинг 4.17. Побудова графіків за допомогою mesh (приклад 4.16).
4.2.2 Побудова графіків поверхонь, заданих параметрично
При побудові графіків поверхонь, заданих параметрично і необхідно побудувати матриці і однакового розміру. Для цього масиви і повинні бути однакового розміру. Можна виділити два основних види подання і в разі параметричного завдання поверхонь:
- якщо і представимо у вигляді , То відповідні їм матриці і слід формувати у вигляді матричного множення на .
- якщо і представимо у вигляді або , То в цьому випадку матриці і слід записувати у вигляді або відповідно.
Розглянемо кілька задач побудови графіків поверхонь заданих параметрично.
Приклад 4.17. Побудувати поверхню однополостного гіперболоїда, рівняння якого задано в параметричному вигляді .
В лістингу 4.18 представлено рішення цього завдання, відповідно до описаного вище алгоритму. Графік однополостного гиперболоида представлений на Мал. 4.22 .
clear all; h = 3.14 / 50; u = [0: h: 3.14] '; % Формуємо вектор-стовпець u. % Формуємо вектор-рядок v. Зверніть увагу, u - стовпець,% v - рядок з однаковою кількістю елементів. v = [0: 2 * h: 6.28]; % Формуємо матрицю X як матричне твір ch (u) cos (v). X = cosh (u) * cos (v); % Формуємо матрицю Y як матричне твір ch (u) * sin (v). Y = cosh (u) * sin (v); % Формуємо матрицю Z як матричне твір стовпця sh (u)% на рядок ones (size (v)). Z = sinh (u) * ones (size (v)); % Формуємо графік поверхні. surf (X, Y, Z); grid on; % Підписуємо графік і осі. title ( 'Plank hyperboloid'); xlabel ( 'X'); ylabel ( 'Y'); zlabel ( 'Z') Лістинг 4.18. Побудова поверхні гіперболоїда (приклад 4.17).
Розглянемо кілька способів побудови сфери в Octave.
Приклад 4.18. Побудувати поверхню сфери з центром і радіусом .
У декартовій системі координат рівняння сфери має вигляд: . Його можна записати в параметричному вигляді
де .
Методика побудови сфери подібна методиці побудови однополостного гіперболоїда, описаної в прикладі 4.17. В лістингу 4.19 представлений текст програми побудови сфери з центром в точці (1, 1, 1) і радіусом , А на Мал. 4.23 зображена сфера.
clear all; h = pi / 30; u = [- 0: h: pi] '; % Формуємо вектор-стовпець u. v = [0: 2 * h: 2 * pi]; % Формуємо вектор-рядок v. % Формуємо матрицю X, використовуючи матричне твір sin (u) * cos (v). x = 1 + 4 * sin (u) * cos (v); % Формуємо матрицю Y, використовуючи твір sin (u) * sin (v). y = 1 + 4 * sin (u) * sin (v); % Формуємо матрицю Z, використовуючи твір стовпця% cos (u) на рядок ones (size (v)). z = 1 + 4 * cos (u) * ones (size (v)); % Формуємо графік поверхні. surf (x, y, z); grid on; % Підписуємо графік і осі. title ( 'SPHERE'); xlabel ( 'X'); ylabel ( 'Y'); zlabel ( 'Z'); Лістинг 4.19. Побудова сфери (приклад 4.18).
Мал. 4.23. Графік сфери, побудований з використанням функції surf
Octave містить вбудовану функцію , Що дозволяє формувати матриці розмірності для побудови сфери одиничного радіуса (див. приклад 4.18) з центром на початку координат.
Для побудови сфери одиничного радіуса з центром в початку координат досить двох команд . Чим n більше, тим більш "округлої" буде сфера. на Мал. 4.24 зображена сфера одиничного радіуса в центрі на початку координат при n = 25.
Мал.4.24.
Графік сфери одиничного радіуса, побудований з використанням функції sphere (25)
вбудовану функцію можна використовувати і для побудови сфери з центром і радіусом . В лістингу 4.20 наведено рішення прикладу 4.18 за допомогою функції sphere (n).
clear all; x0 = 2; y0 = _2; z0 = 5; R = 10% Визначаємо центр і радіус сфери. % Формуємо матриці X, Y, Z для побудови сфери одиничного радіуса% з центром на початку координат, використовуючи функцію sphere (n). [X, Y, Z] = sphere (25); % Перераховуємо матриці X, Y, Z для сфери з центром x0, y0, z0 і радіусом R. X = x0 + R * X; Y = y0 + R * Y; Z = z0 + R * Z; surf (X, Y, Z)% Изображаем сферу Лістинг 4.20. Побудова сфери за допомогою sphere (приклад 4.18).
В результаті роботи програми буде побудована сфера, представлена на Мал. 4.25 .
Сфера є окремим випадком більш загальної фігури - еліпсоїда. Розглянемо два способи побудови еліпсоїда.
Приклад 4.19. Побудувати поверхню еліпсоїда, рівняння якої задано в параметричному вигляді:
тут - піввісь еліпсоїда, - центр еліпсоїда.
Методика побудови еліпсоїда схожа на те, як раніше були побудовані однопорожнинний гіперболоїд (приклад 4.17) і сфера (приклад 4.18). Для цього необхідно сформувати матриці і , Після чого викликати функцію . Як це зробити показано в лістингу 4.21 .
clear all; h = pi / 30; u = [- 0: h: pi] '; % Формуємо вектор-стовпець u. v = [0: 2 * h: 2 * pi]; % Формуємо вектор-рядок v. % Формуємо матрицю X, використовуючи матричне твір sin (u) * cos (v). a = 3; b = 7; c = 1; x0 = y0 = z0 = 10; x = x0 + a * sin (u) * cos (v); % Формуємо матрицю Y, використовуючи твір sin (u) * sin (v). y = y0 + b * sin (u) * sin (v); % Формуємо матрицю Z, використовуючи твір стовпця% cos (u) на рядок ones (size (v)). z = z0 + c * cos (u) * ones (size (v)); surf (x, y, z); grid on; % Формуємо еліпсоїд. % Підписуємо графік і осі. title ( 'ELLIPSOID'); xlabel ( 'X'); ylabel ( 'Y'); zlabel ( 'Z'); Лістинг 4.21. Побудова поверхні еліпсоїда (приклад 4.19).
Еліпсоїд з центром в точці (10, 10, 10) і півосями представлений на Мал. 4.26 .
Однак, для побудови еліпсоїда в Octave існує функція , Яка дозволяє автоматично сформувати матриці .
У функції :
Для побудови еліпсоїда, представленого на Мал. 4.23 досить ввести команди
a = 3; b = 7; c = 1; x0 = y0 = z0 = 10; [X, Y, Z] = ellipsoid (x0, y0, z0, a, b, c, 30); surf (x, y, z); grid on; title ( 'ELLIPSOID'); xlabel ( 'X'); ylabel ( 'Y'); zlabel ( 'Z');
Для побудови циліндрів і кругових конусів можна використовувати функцію для формування матриць . Потім будуємо саму поверхню (циліндр, конус) за допомогою функції .
Познайомимося з функцією cylinder докладніше. Звернення до функції має вигляд. ;
тут - масив радіусів; якщо ми будуємо циліндр, - масив, що складається з двох однакових значень, функція вимагає як мінімум два значення, і для побудови циліндра це будуть радіус верхнього і нижнього підстави; при побудові конуса r є масивом радіусів горизонтальних перетинів кругового конуса;
- формуються для побудови поверхні (конуса, циліндра) матриці розмірності .
Розглянемо кілька прикладів.
Приклад 4.20. Побудувати циліндр радіуса і висотою .
Текст програми приведений в лістингу 4.22 , Графік - на малюнку 4.27 .
clear all; [X, y, z] = cylinder ([4, 4], 25); % Формування матриць x, y, z. grid on; surf (x, y, z); % Побудова циліндра. title ( "Cylinder") Лістинг 4.22. Побудова циліндра висотою 1 (приклад 4.20).
Приклад 4.21. Побудувати циліндр радіуса 4 і висотою 20.
Текст програми приведений в лістингу 4.23 , Графік - на малюнку 4.28 .
clear all; [X, y, z] = cylinder ([4, 4], 25); % Формування матриць x, y, z. grid on; surf (x, y, 20 * z); % Побудова циліндра з урахуванням висоти h = 20. title ( "Cylinder") Лістинг 4.23. Побудова циліндра висотою 20 (приклад 4.21).
Приклад 4.22. Приклади кругових конусів.
Розглянемо кілька прикладів.
Мал.4.27.
Циліндр радіуса R = 4 і висотою h = 1
Мал. 4.28. Циліндр радіуса R = 4 і висотою h = 20
Усічений круговий конус, представлений на Мал. 4.29 , Генерується програмою з лістингу 4.24 .
clear all; [X, y, z] = cylinder (2: 1: 10, 25); grid on; surf (x, y, z); title ( "Cone"); xlabel ( 'X'); ylabel ( 'Y'); zlabel ( 'Z'); Лістинг 4.24. Побудова усіченого кругового конуса (приклад 4.22).
Круговий конус, представлений на Мал. 4.30 , Генерується програмою в лістингу 4.25 .
clear all [x, y, z] = cylinder ([5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5], 25); grid on; mesh (x, y, z); title ( "Cone") xlabel ( 'X'); ylabel ( 'Y'); zlabel ( 'Z'); Лістинг 4.25. Побудова кругового конуса (приклад 4.22).
На завершення приведений лістинг 4.26 , Який генерує поверхню, представлену на Мал. 4.31 .
clear all [x, y, z] = cylinder ([1, 3, 5, 7, 6, 4], 25); surf (x, y, z); title ( "Surface"); xlabel ( 'X'); ylabel ( 'Y'); zlabel ( 'Z'); Лістинг 4.26. Поверхня (див. Рис. 4.30)