Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_10_graf.DOC
Скачиваний:
19
Добавлен:
17.05.2015
Размер:
717.82 Кб
Скачать

Робота з вікнами і координатами.

  1. Очистка екрана виконується функцією

сleardevice( );

  1. Максимальні координати по вертикалі і горизонталі, відповідно:

getmaxy( ), getmaxx( ).

  1. Відкриття вікна в графічному режимі

setviewport(x1, y1, x2, y2, clip);

де x1, y1 – координати лівого верхнього кута;

x2, y2 – координати правого верхнього кута;

clip – відсік.

Якщо параметр clip дорівнює 1, то ті елементи зображення, які не поміщаються в вікні, будуть відсіченні, якщо він дорівнює 0, то межі вікна ігнорується. При успішному виконанні цієї функції покажчик поточної графічної позиції переміститься на початок координат.

  1. Очистка графічного вікна виконує функція;

clearviewport ( )

  1. Поточні координати отримуємо за допомогою функцій

getx( ), gety( ).

  1. Перевстановлення покажчика позиції виконують функції

moveto (x,y); moverel ( dx, dy);

де x,y – нові координати в системі координат вікна;

dx, dy – прирiст відносно старих координат в вікні.

  1. Записування пікселя в відеопам’ять виконує функція:

putpixel (x, y, колір)

Наприклад, в результаті виконання фрагменту

For ( i = 0; i < 160; i++ )

{

putpixel(i, 10, GREEN);

putpixel(160+i, 10, RED);

}

буде виведена зелено-червона пряма.

  1. Виведення графічного тексту в вікно

outtext(Sp); або outtext (x,y,Sp);

Перша – з поточної позиції, друга з позиції (х, у).

Приклади: 1). Суцільна діагональ червоного кольору товщиною в 3 пікселя на зеленому екрані:

{ setbkcolor(GREEN);

sercolor(RED);

setlinestyle(SOLID_LINE, 0, 3);

line(0, 0, getmaxx( ), getmaxy( ));

// Після натискання на клавішу очищуєм екран

getch();

cleardevice();

// Визначимо вікно виведення і очищуємо його.

setviewport (100, 100,getmaxx ( ) – 50, getmaxy ( ) – 50, 1);

clearviewport ( );

rectangle ( 100,100, getmaxx()-50, getmaxy()-50);

settextstyle (TRIPLEX_FONT, HORIZ_DIR, 3);

setbkcolor (BLUE);

setcolor (WHITE);

//виводимо текст в лівому верхньому куту вікна

outtextxy(1,1 “А ось і нове вікно ”);

getch();

closegraph();

return( 0 ); }

Графічні примітиви

Основне призначення графічних примітивів – забезпечити програміста зручним набором програмних засобів для рисування різних геометричних об’єктів. Розглянемо спочатку функції, призначенні для рисування об’єктів контурного типу.

  1. Засіб взаємодії виведених прямих ліній встановлює функція

Setwritemode ( режим ).

Можливі коди параметра режим

0 COPY_PUT

1 XOR_PUT

Будь-яке інше значення автоматично береться по модулю 2. За допомогою цієї функції вказується засіб, яким код малюючого кольору, встановлений за допомогою функції setcolor (), буде взаємодіяти з атрибутами пікселів, які знаходяться на місці об’єкта, який рисується.

Якщо встановлено режим 0, то накреслена лінія “затирає” те, що було на екрані. Якщо ж встановлено режим 1, то для комбінування лінії з існуючим на екрані зображенням використовується операція виключення (або XOR в асемблері). Гарна властивість цієї операції в тому, що виведення двічі на одне і те ж місце лінії приводить до її стирання і відновлення початкового зображення на екрані (це використовується при програмуванні рухомих об’єктів).

Функція setwritemode ( ) працює без” побічних ефектів” тільки з курсиво-лінійними зображеннями (в випадку кривих 2-го порядку бувають непрогнозовані наслідки роботи даної функції).

  1. Лінія рисується будь-яким способом;

1) line(x1, y1, x2, y2);

2) linerel(dx, dy); -лінія малюється з поточної крапки до нових координат;

3) lineto(x, y);

Приклад: 2 способи креслення ромба.

1 спосіб

setwritemode (XOR_PUT); setcolor (GREEN);

moveto (100, 10); lineto(50,90); lineto(100,170);

setcolor (RED); lineto(150, 90); lineto(100, 10);

2 спосіб

setbkcolor (WHITE); setcolor (GREEN);

line (100, 10, 50, 90); line ( 50, 90, 100, 170);

setbkcolor (RED);

line (100, 170, 150, 90); line(150, 90, 100, 10);

  1. Контур прямокутника можна накреслити за допомогою

rectangle(x1, y1, x2, y2);

де x1, y1 – координати лівого верхнього кута;

x2, y2 –координати правого нижнього кута;

Якщо спробувати нарисувати квадрат, то на багатьох моніторах це не виходить тому, що піксель має форму прямокутника, витягненого по вертикалі. Необхідно виконати корегування кількості пікселів по горизонтальній і вертикальній сторонам квадрата. Істинні пропорції пікселів, необхідних для такого корегування, можна взнати за допомогою функції

getaspectratio(&xasp, &yasp);

Відношення xasp/yasp і є відношенням горизонтального і вертикального розмірів пікселя. Тому, якщо горизонтальний рядок квадрату має розмір G пікселів, то довжина вертикального рядка повинна бути:

(int)(G * (float)xasp/yasp);

4. Накреслити ламану лінію дозволяє функція drawpoly( кількість вершин, покажчик на масив цілих);

Кожна пара чисел масиву інтерпретується як пара координат чергової вершини ламаної.

5. Для зображення кривих використовують функції

-circle(x, y, радіус) – для рисування кола;

-для рисування дуги кола: arc(x, y, поч_ кут, кін_ кут, радіус ).

Кути задаються в градусах і відраховуються проти часової стрілки. Кульовий кут відповідає горизонтальному направленню вектора зліва направо. Значення кутів перетворюється до еквівалентних значень з інтервалу [0..360]. Таким чином,

arc(x, y, -45, 45, r) і arc(x, y, 675, -315, r)

задають одну і ту ж дугу в четвертину кола.

6. Паралелепіпед з зафарбованою передньою гранню можна нарисувати, використовуючи функцію

bar3d(x1, y1, x2, y2, глибина, ‘dax’);

Паралелепіпед обрамляється зовнішнім контуром. Якщо параметр глибина буде дорівнювати 0, то отримаємо обрамлений прямокутник. Якщо параметр dax дорівнює 1 (TOP_ON), то рисується верхня грань; якщо він дорівнює 0 (TOP_OFF), то верхня грань не промальовується (це корисно, якщо треба поставити один на інший декілька паралелепіпедів).

Приклад: Паралелепіпеди, які стоять один на іншому:

Setbkcolor (WHITE);

Setcolor (GREEN);

Bar3d (250, 50, 250, 150, 15, 1);

Bar3d (220, 150, 260, 180, 15, 1 );

Bar3d (300, 150, 340, 180, 15, 0);

Bar3d (300, 50, 340, 150, 15, 1);

8. Побудувати і зафарбувати багатокутник дозволяє функція

fillpoly(n, покажчик на масив цілих);

де n –кількість вершин.

Координати кожної вершини задаються двома величинами цілого типу. Ця функція завжди з’єднує першу точку списку вершин з останньою, замикає контур і зафарбовує його. Шаблон і колір

зафарбування може бути заданий функціями setfillstyle( ) і setfillpattern( ).

9. Звичайний еліпс рисує функція

ellipse (x, y, поч_кут, кін_кут, rx, ry ); rx,ry – довжини полуосей еліпса в пікселях. Осі еліпса завжди паралельні осям координат.

Соседние файлы в папке lexzii_08