69106

Побудова графіків функцій. Претворення координат і об’єктів

Лекция

Информатика, кибернетика и программирование

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

Украинкский

2014-09-30

63 KB

0 чел.

Лекція 15.Тема: Побудова графіків функцій. Претворення координат і об’єктів.

План:

1. Зображення текстової інформації у графічному режимі

2. Побудова графіків функцій

3. Перетворення координат і об'єктів

1. Зображення текстової інформації у графічному режимі

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

Const {типи шрифтів}

DefaultFont=0; TriplexFont=1;  SmallFont=2; SansSerifFont=3; GothicFont=4;

Const {напрям тексту}

HorizDir=0; {зліва направо}

VertDir=1; {знизу догори}

Const {вирівнювання тексту}

LeftText=0; CenterText=1; RightText=2; {горизонтальне}

BottomText=0; CenterText=1; TopText=2; {вертикальне}

 

Усі шрифти, крім шрифту DefaultFont, є векторними, тобто їх елементи формуються як сукупність векторів, що характеризуються напрямом і довжиною. Жоден шрифт, крім зазначеного, не підтримує кирилиці - для виведення її символів шрифти слід модифікувати. Власне виведення тексту виконують процедури OutText i OutTextXY, які було наведено в табл. 5.1.

2. Побудова графіків функцій

Технологію побудови графіків функцій продемонструємо на прикладі функції f(x)=|sin x|+|cos x|. Графік функції побудуємо за точками (x, f(x)): циклічно задамо ряд значень абсциси {xi}, обчислимо відповідні значення ординати y=f(xi) і зобразимо серію відрізків, що з'єднуватимуть точки (xi-1, yi-1) із точками (xi, yi).

Для зображення графіка слід перевести логічні координати його точок у їх екранні еквіваленти. Область визначення розглядуваної функції — це вся вісь абсцис, а область значень — відрізок [-2, 2]. Відрізок логічної вісі ординат завдовжки 4 сід розтягнути у вертикальний екранний відрізок більшої довжини, тобто домножити на коефіцієнт, що його називатимемо масштабом. Вважатимемо, шо масштаб є цілим числом від 20 до 100. 3 урахуванням того, що центр логічної системи координат збігається із центром екрана, а також того, що напрям екранної вісі ординат є зворотним до напряму логічної вісі ординат, отримаемо таку формулу для обчислення екранної ординати у_екрана за логічною ординатою f(x):

у_екрана:=у_центра_екрана-масштаб*f(x);

Яким чином визначати логічні абсциси? Найкраща якість зображення графіка досягається тоді, коли кожній екранній абсцисі відповідає логічна абсцисса. Наприклад, якщо вісь абсцис проходитиме посередині екрана, який містить 480 точок по вертикалі, то екранний піксел (0,240) буде зіставлений з логічною точкою (х1, 0), піксел (1, 240) - з точкою (х2,0). Такої відповідності легко досягти, якщо перерахувати екранну координату х_екрана у відповідну логічну координату х. це можливо зробити за такою формулаю:

х:=(х_екрана-х_центра_екрана)/масштаб;

Приклад 5.3.

Програма ех5_2 будує графік функції f(x)=|sin x|+cos |x|. Значення масштабу вводиться до змінної scale, а координати центра екрана на початку роботи програми присвоюються змінним сх і су. Графік будується процедурою build_graph. Дві інші процедури зображують координатні вісі і розмічають їх. При розмітці осей координат використовуються рядки тексту, обробка яких детально розглядатиметься в розділі 7.3. Результати роботи програми наведено на рис. 5.2.

Program ех5_2;      {графік функції у=|sin x|+cos |x|}

uses crt, graph;

var dr, mode: integer;      {графічний драйвер і режим}

  scale: real;       {масштаб}

  cx, cy: integer;      {координати центра екрана}

{------------------------аналітична функція, графік якої будується -------------------------}

function f(x: real): real;

begin

  f:=abs(sin(x))+cos(abs(x));

end;

{--------------------------------- виведення вісей координат ---------------------------------}

procedure axes;

begin

  SetColor(1);

  Line (cx, 0, cx GetMaxY);      {вісь У}

  Line (0, cy, GetMaxX, cy);      {вісь Х}

{стрілки на вісі Х }

  Line (GetMaxX-10, (cy)-5, GetMaxX, cy);

  Line (GetMaxX-10, (cy)+5, GetMaxX, cy);

{стрілки на вісі У}

  Line (cx, 0, (cx)-5, 10);

  Line (cx, 0, (cx)+5, 10);

        {написи на вісях}

  outtextxy (GetMaxX-10, cy+20, ‘X’);

  outtextxy (cx+10, 10, ‘Y’);

end;

{--------------------------------- розмітка вісей координат ---------------------------------}

procedure graduir;

var i, j: real;        {позначки на вісях}

  s:string[7];      {рядок для виведення позначки на вісях}

begin

  SetColor(1);

  j:=0;        {позначка ‘0’ в центрі координат}

{--------------------------------- розмітити вісь Х ---------------------------------}

{позначки у вигляді вертикальних рисок}

  repeat

     i:=cx+(-j)*scale;

     line (round(i), cy-5, round(i), cy+5);

     if j<>0 then     {не виводити повторно позначку ‘0’ }

     begin

        str (-j:6:2, s);  {перетворити числову позначку на текстову і відобразити її на екрані}

        OutTextXY (round(i)-10, cy+10, s);

     end;

{зобразити позначки на горизонтальні вісі}

     i:=cx+j*scale;

     Line (round(i), cy-5, round(i), cy+5);

     if j<>0 then

     begin

        str (j:6:2, s);     {перетворення числа на рядок}

        OutTextXY (round(i)-10, cy+10, s);

     end;

     j:=j+pi;

  until j=8*pi;       {позначки вичерпано}

{--------------------------------- розмітити вісь У ---------------------------------}

  j:=0;

  repeat

     i:=cy-j*scale;      {розташування позначки на вісі У}

     line (cx+3, round(i), cx-3, round(i));

     if j<>0 then

     begin

        str (j:4:1, s);      {перетворення числа на рядок}

{вивести значення, відповідне позначці на вертикальній вісі в межах від 0 до 2}

        OutTextXY (cx+15, round(i)-2, s);

     end;

     i:=cy+j*scale;

     line (cx+3, round(i), cx-3, round(i));

     if j<>0 then

     begin

        str (-j:4:1, s);      {перетворення числа на рядок}

{вивести позначки на вертикальній вісі в межах від -2 до 0}

        OutTextXY (cx+15, round(i)-2, s);

     end;

     j:=j+0.5;

{розмітити вертикальну вісь через кожні 0.5 ділень}

  until j+2;      {діапазон позначок: від -2 до 2}

end;

{--------------------------------- побудова графіка ---------------------------------}

procedure build_graph;

var

  x0, y0, x1, y1: integer;   {екранні координати кінців відрізка графіка}

  x: real;

begin

  for x0:=0 to GetMaxX do     {вибір екранної абсциси}

  begin

     x:=(x0-cx)/scale;  {перерахувати пік селі екрана в логічні координати абсциси графіка}

     y0:=round (cy-scale*f(x));

     if x0>0 then

        line (x0, y0, x1, y1);     {зобразити відрізок графіка}

     x1:=x0;       {зберегти координати кінця

     y1:=y0;        попереднього відрізку}

  end;

end;

{--------------------------------- основна програма ---------------------------------}

begin

  dr:=Detect;       {визначити графічний драйвер}

  InitGraph (dr, mode, ‘d:\bp\bgi’);    {ініціалізувати графічний драйвер}

  cx:= GetMaxX div 2;     {визначити координати}

  cy:= GetMaxY div 2;     {центра екрана}

  SetBkColor(15);      {визначити колір фону}

  SetColor(1);       {визначити колір ліній}

  OutText (‘input scale (20…100):’);

  gotoxy(27, 1);

  read (scale);       {увести масштаб зображення}

  ClearDevice;      {очистити екран}

  axes;        {зобразити вісі координат}

  graduir;       {розмітити вісі}

  OutTextXY (10, 30, ‘y=|sin(x)|+cos|x|’);   {вивести напис}

  build graph;       {зобразити графік}

end.

3. Перетворення координат і об'єктів

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

Припустимо, що у декартовій системі координат задана плоска геометрична фігура, (х, у) – координати одієї з її точок. Нехай (х1, у1) - координати тієї самої точки фігури після їх перетворення. Наведемо формули паралельного перенесення геометричної фігури на dx одиниць уздовж осі X і на dy одиниць уздовж осі У (формула а), розтягування уздовж осі X у kx разів і вздовж осі У у ky разів (формула б) і повороту навколо початку координат на кут α (формула в).

Лінійні перетворення проілюстровано на рис. 5.3. Необідно зазначити, що будь-яке перетворення координат об'єкта можна розглядати як перетворення координатних осей.

а)   б)   в)

Приклад 5.4.

Розробимо програму обертання відрізка навколо одного зі своїх кінців. Вважатимемо, що початок логічних координат збігається із нерухомим кінцем відрізка, а довжина відрізка дорівнює r. Тоді рухомий кінець відрізка матиме спочатку координати (r,0), а після обертання на кут α — координати:

(r соs α + 0*sin α, - r sin α + 0*соs α) = (r соs α, - r sin α). Нерухомим кінцем відрізка вважатимемо центр екрана, і з урахуванням того, що до цієї точки було перенесено початок координат, а також того, що екранна вісь ординат спрямована донизу, отримаємо такі формули координат рухомого кінця: (xc+r cos α, r sin α), де (xc, yc) - координати центра екрана.

Program ех5_3;

uses crt, graph;

var d, m,      {графічний драйвер і графічний режим}

     x, y,      {координати рухомого кінця}

     r: integer;      {довжина відрізка}

     a: real;      {кут повороту відрізка}

begin

  d:=detect;      {ініціалізація графічного режиму}

  initgraph (d, m, ‘d:\bp\bgi’);

  r:=100;      {ініціалізувати довжину відрізка}

  setbkcolor (15);       {колір фону}

  setcolor (3);        {колір літер та ліній}

  settextstyle (0, 0, 1);      {стиль літер}

  outtextxy (100, 50, ‘Rotational displacement of line’);

  outtextxy (100, 80, ‘Press any key to exit’);

  a:=0;

  repeat

     x:=320+round(cos(a)*r);     {перетворення координат}

     y:=240+round(sin(a)*r);     {рухомого кінця}

     setcolor (5);      {відображення відрізка}

     line (320, 240, x, y);

     delay (2000);      {затримка}

     setcolor (15);      {затирання відрізка}

     line (320, 240, x, y);

     a:=a+pi/36;      {збільшення кута повороту}

  until keypressed;

end.

Контрольні питання

1. Зображення текстової інформації у графічному режимі

2. Побудова графіків функцій

3. Перетворення координат і об'єктів


 

А также другие работы, которые могут Вас заинтересовать

59764. Суспільно-політичне життя УРСР в 1985-1991 роках 40 KB
  Очікувані результати: після цього уроку учні зможуть аналізувати явища суспільнополітичного життя в зазначений період; характеризувати політику гласності лібералізації спроби провести політичні реформи зростання політичної активності населення; співставляти різні точки зору щодо процесів в роки перебудови в Україні та дає їм власну оцінку визначає вплив політичних процесів в роки перебудова на формування причин розпаду СРСР удосконалити навики роботи по створенню “асоціативного куща†презентації на задану тему сформувати і...
59766. Сполучені Штати Америки. Загальна характеристика 59.5 KB
  He was a seaman and made many sea voyages. In 1492 the King and the Queen of Spain gave him money to go to India. He decided to sail west as he was sure that our planet was round. And after sailing 4000 miles
59767. США в первой половине ХIХ века. Гражданская война в США 44 KB
  Цели: охарактеризовать особенности социально-экономического развития США раскрыть причины гражданской войны ознакомить учащихся с её ходом определить влияние личности А.Линкольна президентом...
59768. Адміністративний та державний устрій США. The White House and Its Dwellers 210.5 KB
  We have been studying America for 4 months already. We have learnt about geographical and economical peculiarities of the USA, about emblems, state system, cities of the USA.
59769. Доба «проспериті» у США. Прояви Великої Депресії. Економічні та соціальні засади «Нового курсу» Рузвельта 326.5 KB
  Тема уроку: Доба проспериті у США. Після уроку учні зможуть: пояснювати суть доби проспериті і нового курсу; називати основні події в США в період Великої Депресії аналізувати передумови світової кризи застосовувати та пояснювати поняття...
59770. Life of a Society. Famous People of the USA 32 KB
  At our lesson you’ll introduce your projects/reports devoted to famous people of the USA, you’ll develop your listening skills, practise vocabulary in a realistic context, master oral language skills and extend your knowledge of the USA history.