 
        
        Лабораторная работа №6 Вариант 2
.docФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ
Лабораторная работа №6
«Построение графических примитивов»
по дисциплине
«Технология программирования»
| 
 | Студент | 
 | 
 | 
 | Бутаков В.В. | 
 | ||||||||
| 
 | 
 | 
 | подпись, дата | 
 | фамилия, инициалы | 
 | ||||||||
| 
 | Группа | 
 | АС-09 | 
 | 
 | 
 | 
 | |||||||
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||
| 
 | Принял | 
 | 
 | 
 | 
 | 
 | ||||||||
| 
 | 
 | 
 | 
 | 
 | Домашнев П.А. | 
 | ||||||||
| 
 | ученая степень, звание | 
 | подпись, дата | 
 | фамилия, инициалы | 
 | ||||||||
Липецк 2010
- 
Задание
Задание кафедры
Написать программу, реализующую целочисленный алгоритм построения графического примитива.
Вариант 2
Графический примитив: дуга окружности
Краткие теоретические сведения.
Для вывода алгоритма рассмотрим первую четверть окружности с центром в начале координат. Заметим, что если работа алгоритма начинается в точке х = 0, у = R, то при генерации окружности по часовой стрелке в первом квадранте у является монотонно убывающей функцией аргументам (рис. 5.2). Аналогично, если исходной точкой является у = 0, х == R, то при генерации окружности против часовой стрелки х будет монотонно убывающей функцией аргумента у. В нашем случае выбирается генерация по часовой стрелке с началом в точке х = 0, у = R. Предполагается, что центр окружности и начальная точка находятся точно в точках растра.
Для любой заданной точки на окружности при генерации по часовой стрелке существует только три возможности выбрать следующий пиксел, наилучшим образом приближающий окружность: горизонтально вправо, по диагонали вниз и вправо, вертикально вниз:

- 
Блок-схема программы
- 
Листинг программы
#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();
}
- 
Контрольный пример


