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. Перетворення координат і об'єктів


 

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

45415. Строение и система уголовного права 29 KB
  Особенная часть уголовного права изучает конкретные преступления по их родам и видам: преступления против жизни здоровья личности; против свободы чести и достоинства личности; против половой неприкосновенности и половой свободы личности; против конституционных прав и свобод человека и гражданина; против семьи и несовершеннолетних; против собственности; преступления в сфере экономической деятельности; против интересов службы в коммерческих и иных организациях; против общественной безопасности; против здоровья населения и общественной...
45416. Понятие уголовной ответственности 26 KB
  Понятие уголовной ответственности Уголовная ответственность разновидность юридической ответственности. 8 УК РФ указывает что является основанием уголовной ответственности. Наибольшее распространение имеют три подхода к определению уголовной ответственности: обязанность лица совершившего преступление отвечать за содеянное в соответствии с уголовным законом; применение к виновному лицу мер уголовноправового характера; судимость как правовое последствие назначения наказания. Момент начала и окончания уголовной ответственности...
45417. Виды наказаний 23 KB
  44 УК РФ предусмотрены следующие виды наказаний: штраф; лишение права занимать определенные должности или заниматься определенной деятельностью; лишение специального воинского или почетного звания классного чина и государственных наград; обязательные работы; исправительные работы; ограничение по военной службе; ограничение свободы; арест; содержание в дисциплинарной воинской части; лишение свободы на определенный срок; пожизненное лишение свободы; смертная казнь. 45 УК РФ к основным видам наказания относятся: ...
45418. Умысел и его виды 31 KB
  Прямой умысел характеризуется тем что лицо совершившее преступление осознавало общественно опасный характер своих действий бездействия предвидело возможность или неизбежность наступления общественно опасных последствий интеллектуальный признак и желало их наступления волевой признак ч. Косвенный умысел характеризуется тем что лицо совершившее преступление осознавало общественно опасный характер своих действий бездействия предвидело возможность наступления общественно опасных последствий интеллектуальный момент не желало но...
45419. Действие уголовного закона во времени. Обратная сила уголовного закона 44.5 KB
  9 УК РФ; временем совершения преступления признается время совершения соответствующих действий бездействия независимо от времени наступления последствий ч. В зависимости от законодательной конструкции состава преступления время его совершения будет различным. Это может быть например групповой способ совершения преступления тяжесть наступивших последствий определённые социально значимые характеристики потерпевшего например совершение преступления в отношении несовершеннолетнего и т. Так к преступлениям с материальным составом...
45420. Необходимая оборона 28 KB
  Необходимая оборона Необходимая оборона это правомерная защита лицом своих прав и интересов других лиц общества или государства от общественно опасного посягательства путем вынужденного причинения вреда нападающему если при этом не было допущено превышение пределов необходимой обороны. Уголовный закон устанавливает условия правомерности необходимой обороны которые делятся на условия относящиеся к посягательству и на условия относящиеся к защите. Признак действительности нападения позволяет отграничить его от мнимого нападения и...
45421. НЕОКОНЧЕННОЕ ПРЕСТУПЛЕНИЕ 80 KB
  Оконченное и неоконченное преступления 1. Преступление признается оконченным если в совершенном лицом деянии содержатся все признаки состава преступления предусмотренного настоящим Кодексом. 29 признает преступление оконченным если в совершенном лицом деянии содержатся все признаки состава преступления предусмотренного УК. Момент определения окончания преступления зависит от особенностей законодательной конструкции того или иного преступления в первую очередь его объективной стороны то есть от того как в уголовном законе определено...
45422. Неосторожность и ее виды 31.5 KB
  26 УК РФ преступление признается совершенным по легкомыслию если лицо его совершившее предвидело возможность наступления общественно опасных последствий своего действия бездействия но без достаточных к тому оснований самонадеянно рассчитывало на их предотвращение. 26 УК интеллектуальный элемент преступного легкомыслия характеризуется указанием на предвидение только возможности наступления общественно опасных последствий и ничего не сказано об осознании лицом факта совершения им общественно опасных действий. Однако при этом следует...
45423. Особенности уголовной ответственности и наказания несовершеннолетних. Виды и размеры наказаний, назначаемых несовершеннолетним (ст. 87—88 УК РФ) 27 KB
  Виды и размеры наказаний назначаемых несовершеннолетним ст. 87 88 УК РФ Несовершеннолетними в соответствии со ст. Существенно сокращен перечень видов наказаний которые могут применяться к несовершеннолетним. Кроме видов наказаний которые могут назначаться несовершеннолетним в ст.