Урок " Робота з полярною системою координат"

Про матеріал

Розширений додатковий матеріал для вивчення теми "Комп'ютерна графіка Pascal"

Структура:

  1. Поняття про полярну систему координат
  2. Переведення координат із полярних у декартову
  3. Приклад побудови складних зображень, з використанням методу полярних координат
Перегляд файлу

Робота з полярною системою координат

Для побудов графічних примітивів, які складаються з ліній і прямокутників легко можна використовувати Декартову перевернуту систему координат, яку використовує графічний режим Pascal. Проте, для роботи з окружностями вона є дещо незручною, оскільки є прямолінійною. У випадку розрахунків чи побудови графіків складних функцій, або знаходження точок на колі чи дузі зручніше використовувати полярну систему координат.

Полярна система координат — двовимірна координат, в якій кожна точка на площині визначається двома числами — кутом та відстанню. Полярна система координат особливо корисна у випадках, коли відношення між точками найпростіше зобразити у вигляді відстаней та кутів; в більш поширеній, Декартовій, або прямокутній системі координат, такі відношення можна встановити лише шляхом тригонометричних рівнянь.

Полярна система координат задається променем, який називають нульовим або полярною віссю. Точка, з якої виходить цей промінь називається початком координат або полюсом. Будь-яка інша точка на площині визначається двома полярними координатами: радіальною    та         кутовою.         Радіальна

координата (зазвичай позначається r) відповідає відстані           від точки до початку координат. Кутова координата, що також зветься полярним кутом або азимутом і позначається φ, дорівнює куту, на який потрібно повернути проти годинникової стрілки полярну вісь для того, щоб потрапити в цю точку.

Визначена таким чином радіальна координата може приймати значення від нуля до нескінченості, а кутова координата змінюється в межах від 0° до 360°. Однак, для зручності область значень полярної координати можна розширити за межі повного кута, а також дозволити їй приймати від'ємні значення, що відповідатиме повороту полярної осі за годинниковою стрілкою.

Проте, для того, щоб зобразити фігуру в графічному режимі Pascal, необхідно, все ж, координати представляти не в полярній, а в Декартовій системі. Для цього існують наступні співвідношення: Зв'язок між декартовими та полярними координатами x=r*cos (ϕ); y=r*sin (ϕ);

Оскільки в даних співвідношеннях присутні тригонометричні функції, то необхідно провести ще деякі корективи – значення кутів у цих функціях завжди подається не в градусній, а і радіанній мірі:

x=r*cos (ϕ/180*π); y=r*sin (ϕ/180*π);

Також, оскільки в нашому випадку вісь 0Y перевернута, то остаточні перетворення матимуть вигляд:

x=r*cos (ϕ/180*π);

y=-r*sin (ϕ/180*π);

 

 

             

Задача: Написати програму, що малює знак радіації, який зображено на рисунку.

 

Дану фігуру найзручніше будувати за допомогою дуг та ліній, оскільки при використанні інших фігур такого ефекту з даними кольорами досягти неможливо. Для початку визначимося з розмірами і кутами сегментів фігури. Для цього виконаємо наступну побудову:

 

Задамо наступні значення: R1=40, R2=60, R3=200, R4=230.

Код програми: Program Prapor;  uses graph, crt;

 var gr, gd, x, y,r1,r2,r3,r4,k1,k2:integer;  begin   gd:=detect;

initgraph(gr,gd,'../bgi');

if graphresult<>0 then writeln('ERROR')    else     begin     x:=getmaxx div 2;     y:=getmaxy div 2;

r1:=40; r2:=60; r3:=200; r4:=230;

setcolor(14);     circle(x,y,r1);

   

 k1:=0; k2:=60;     arc(x,y,k1,k2,r2);     arc(x,y,k1,k2,r3); line(trunc(x+r2*cos(k1/180*pi)),trunc(y-r2*sin(k1/180*pi)), trunc(x+r3*cos(k1/180*pi)),trunc(y-r3*sin(k1/180*pi))); line(trunc(x+r2*cos(k2/180*pi)),trunc(y-r2*sin(k2/180*pi)), trunc(x+r3*cos(k2/180*pi)),trunc(y-r3*sin(k2/180*pi)));     k1:=120; k2:=180;     arc(x,y,k1,k2,r2);     arc(x,y,k1,k2,r3); line(trunc(x+r2*cos(k1/180*pi)),trunc(y-r2*sin(k1/180*pi)), trunc(x+r3*cos(k1/180*pi)),trunc(y-r3*sin(k1/180*pi))); line(trunc(x+r2*cos(k2/180*pi)),trunc(y-r2*sin(k2/180*pi)), trunc(x+r3*cos(k2/180*pi)),trunc(y-r3*sin(k2/180*pi)));

 

k1:=240; k2:=300;     arc(x,y,k1,k2,r2);     arc(x,y,k1,k2,r3); line(trunc(x+r2*cos(k1/180*pi)),trunc(y-r2*sin(k1/180*pi)), trunc(x+r3*cos(k1/180*pi)),trunc(y-r3*sin(k1/180*pi))); line(trunc(x+r2*cos(k2/180*pi)),trunc(y-r2*sin(k2/180*pi)), trunc(x+r3*cos(k2/180*pi)),trunc(y-r3*sin(k2/180*pi)));

 

circle(x,y,r4);     setfillstyle(1,14);     floodfill(x,y-r1+1,14); floodfill(x,y-r4-1,14);     end;   readkey;   closegraph; end.

 

pdf
Додав(-ла)
Апенера Вадим
Додано
19 жовтня 2018
Переглядів
1744
Оцінка розробки
Відгуки відсутні
Безкоштовний сертифікат
про публікацію авторської розробки
Щоб отримати, додайте розробку

Додати розробку