Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №6 Вариант 2

.doc
Скачиваний:
6
Добавлен:
20.06.2014
Размер:
224.77 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ

Лабораторная работа №6

«Построение графических примитивов»

по дисциплине

«Технология программирования»

Студент

Бутаков В.В.

подпись, дата

фамилия, инициалы

Группа

АС-09

Принял

Домашнев П.А.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2010

  1. Задание

Задание кафедры

Написать программу, реализующую целочисленный алгоритм построения графического примитива.

Вариант 2

Графический примитив: дуга окружности

Краткие теоретические сведения.

Для вывода алгоритма рассмотрим первую четверть окружности с центром в начале координат. Заметим, что если работа алгоритма начинается в точке х = 0, у = R, то при генерации окружности по часовой стрелке в первом квадранте у является монотонно убывающей функцией аргументам (рис. 5.2). Аналогично, если исходной точкой является у = 0, х == R, то при генерации окружности против часовой стрелки х будет монотонно убывающей функцией аргумента у. В нашем случае выбирается генерация по часовой стрелке с началом в точке х = 0, у = R. Предполагается, что центр окружности и начальная точка находятся точно в точках растра.

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

  1. Блок-схема программы

  1. Листинг программы

#include <conio.h>

#include <stdio.h>

#define R 10

void main()

{

int A[2*R+1][2*R+1];

int x=0;

int y=R;

int delta=2-2*R;

int error=0;

while(y>=0)

{

A[R+y][R+x]=1;

A[R-y][R+x]=1;

A[R+y][R-x]=1;

A[R-y][R-x]=1;

error=2*(delta+y)-1;

if((delta<0)&&(error<=0))

{

delta+=2*(++x)+1;

continue;

}

error=2*(delta+x)-1;

if((delta>0)&&(error>0))

{

delta+=1-2*(--y);

continue;

}

x++;

delta+=2*(x - y);

y--;

}

for(int i=0;i<2*R+1;i++)

{

for(int j=0;j<2*R+1;j++)

{

if(A[i][j]==1)printf("*");

else printf(" ");

}

printf("\n");

}

getch();

}

  1. Контрольный пример