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


 

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

40713. Рентабельность. Виды и методика расчета ее уровня 31.5 KB
  Рентабельность. РЕНТАБЕЛЬНОСТЬ от нем. Количественно рентабельность исчисляется как частное от деления прибыли на затраты расход ресурсов обеспечивающих получение прибыли. Рентабельность продукции определяется как отношение прибыли от ее реализации к себестоимости.
40714. Бизнес-планирование 37 KB
  Бизнеспланирование. В рыночной экономике бизнесплан является рабочим инструментом используемым во всех сферах предпринимательства. Основной целью разработки бизнесплана является планирование хозяйственной деятельности фирмы на ближайший и отдаленные периоды в соответствии с потребностями рынка и возможностями получения необходимых ресурсов. Другие цели разработки плана бизнеса могут быть различными например: уяснить степень реальности достижения намеченных результатов; доказать определенному кругу лиц целесообразность...
40715. Корпоративное управление как важнейший фактор экономического роста 39 KB
  Надлежащий режим корпоративного управления способствует эффективному использованию корпорацией своего капитала подотчетности органов ее управления как самой компании так и ее акционерам. В результате формирования такой структуры акционерного капитала утвердилась ориентация крупных акционеров не на повышение доходов по акциям компании не на рост ее капитализации а на сохранение существующих взаимоотношений с предприятием. В самом общем виде общепризнанные международные принципы корпоративного управления сводятся к следующему: ...
40716. Анализ кадрового потенциала организации 29 KB
  Анализ кадрового потенциала организации. Для комплексной оценки кадрового потенциала используются три группы взаимодополняющих оценок: стоимостные; количественные; качественные. Стоимостные оценки базируются на возникшей в 60е годы нашего столетия теории кадрового капитала одним из ярких представителей которой является американский ученый Р. Для всесторонней оценки кадрового потенциала на кризисном предприятии проводится так называемый кадровый аудит.
40717. Тенденции и перспективы развития венчурного бизнеса в России и за рубежом 62.5 KB
  Тенденции и перспективы развития венчурного бизнеса в России и за рубежом. Сущность венчурного финансирования заключается в финансировании предложений по развитию производственной коммерческой или иной деятельности необходимой региону и ориентированной на получение прибыли на основе существующих или вновь для этого создаваемых малых предприятий путем вложения определенной части финансовых или иных ресурсов их деятельности без гарантии возвратности с учетом возможности потери вложенных средств если финансируемый проект не принесет после...
40718. Научно-технический и инновационный потенциал организации :сущность, структура и основные показатели оценки 41.5 KB
  Научнотехнический потенциалстрана регион организация – общественная форма совокупности живого и общественного труда обеспечивающая производство новых знаний создание освоение нововведений в т. Межотраслевые технологические прогнозы кривые появления и развития новых технологий формирование компетенций поддерживающих прогрессивные технологии на уровне фирмы. Принципы финансирования незапланированных инициатив выявление новых идей сотрудников поощрение их нововведенческого поведения. Оценивать важность новых инициатив и их...
40719. Основные направления инновационной политики государства 53.5 KB
  Одним из важнейших показателей состояния и развития научной деятельности является численность исследователей техников и вспомогательного персонала занятых в инновационной сфере. Россия направляющая в научнотехническую сферу менее 1 ВВП все больше отстает от группы промышленно развитых и некоторых развивающихся стран. Недостаток капитала выступает сегодня в России в качестве одного из основных ограничителей научнотехнического развития. Устойчивой гарантией динамичного развития научнотехнической сферы в условиях рынка является только...
40720. Инновация: сущность, источники, жизненный цикл 31.5 KB
  Эти различия затрагивают прежде всего общую продолжительность цикла продолжительность каждой стадии внутри цикла особенности развития самого цикла разное количество стадий. Виды и количество стадий жизненного цикла определяются особенностями той или иной инновации. Однако у каждой инновации можно определить стержневую то есть базовую основу жизненного цикла с четко выделенными стадиями. Схемы жизненного цикла различны у инновационного продукта и у инновационной операции процедуры.
40721. Программно-целевой метод управления 28 KB
  Программноцелевой метод управления. Программноцелевой метод научнопрограммный и временной способ увязки планируемых целей с ресурсами. Программноцелевой метод в управлении ориентирован на достижение конечного результата в логике поэтапного действия: формирование дерева целей разработка адекватной исполняющей программы реализация управляющей программы. Ключевой идеей программноцелевого метода выступает матрица цель средство иерархическая структура строго сформулированных целей программных элементов каждый из которых служит...