Лабораторная работа №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();
}
-
Контрольный пример