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

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

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

2

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

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

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

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

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

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

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

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

на тему:

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

Студент

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

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

Группа

Принял

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

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

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

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

Липецк 2010

  1. Задание

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

Вариант 21: отрезок.

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

#include <iostream>

#include <math.h>

void draw(int x0, int y0, int x1, int y1)

{

int Xlen=x1-x0;//проекция отрезка на ось Х

int Ylen=y1-y0;//проекция отрезка на ось У

float *E=(float *)malloc((Xlen+1)*sizeof(float));

int *masX=(int *)malloc(sizeof(int)*(Xlen+1));//массив координиат Х от Х0(Ах) до Х1(Вх)

int *masY=(int *)malloc(sizeof(int)*(Xlen+1));//

double *d_masY=(double *)malloc(sizeof(double)*(Xlen+1));//массив значений уравнения прямой в каждой из координат отрезка

char **g_mas=(char **)malloc(sizeof(char)*(y1+1));//g_mas - двумерный массив (X x Y), состоящий из точек и символов *

for(int i=0;i<(y1+1);i++)

g_mas[i]=(char *)malloc(sizeof(char)*(x1+1));

for(int i=0;i<(y1+1);i++)//"обнуление" массива

for(int j=0;j<(x1+1);j++)

g_mas[i][j]='.';

for(int i=0;i<(Xlen+1);i++)//заполнение массива координат Х

masX[i]=x0+i;

for(int i=0;i<(Xlen+1);i++)//заполнение массива значний по оси У

d_masY[i]=((double)(masX[i]-x0))/((double)Xlen)*((double)Ylen)+y0;

masY[0]=y0;

E[0]=(float)(d_masY[1]-d_masY[0])/(masX[1]-masX[0])-0.5;

for(int i=0;i<Xlen;i++)

{

E[i+1]=E[i]+(float)(d_masY[i+1]-d_masY[i])/(masX[i+1]-masX[i]);

if(E[i+1]>0)

{

masY[i+1]=masY[i]+1;

E[i+1]=E[i+1]-1;

}

else

masY[i+1]=masY[i];

printf("%f\t%d\n",E[i],masY[i]);

}

for(int i=0;i<(Xlen+1);i++)

{

g_mas[y1-masY[i]][masX[i]]='*';

if(i<Xlen)

{

int d=(masY[i+1]-masY[i])/2;//разниуа по У

if(d>1)//если половина больше 1, то заполняем недостающие элементы

{

for(int j=1;j<d;j++)

g_mas[y1-masY[i]-j][masX[i]]='*';

for(int j=d;j<(masY[i+1]-masY[i]);j++)

g_mas[y1-masY[i]-j][masX[i+1]]='*';

}

}

}

for(int i=0;i<(y1+1);i++)

{

for(int j=0;j<(x1+1);j++)

printf("%c", g_mas[i][j]);

printf("\n");

}

}

void menu()

{

int x0=0, y0=0, x1=0, y1=0;

printf("\nВведите координаты начальной точки: ");

scanf("%d %d", &x0, &y0);

printf("\nВведите координаты конечной точки: ");

scanf("%d %d", &x1, &y1);

if(x1<x0 || x0>80 || x1>80 || y0>24 || y1>24)

{

printf("Подобное нарисовать нельзя!");

printf("\nПожалуйста, повторите попытку...\n\n");

system("pause");

system("cls");

menu();

}

else

{

printf("График:\n\n");

draw(x0, y0, x1, y1);

}

}

void main()

{

setlocale(LC_ALL, "Rus");

menu();

system("pause");

}

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

4.Блок-схема

5. Вывод

При выполнении данной лабораторной работы я получил навыки программирования графических примитивов.

6.Список использованной литературы

  1. Шилдт Г. Искусство программирования на C++. БХВ.2005

  2. Шилдт Г. C++ Руководство для начинающих. Вильямс.2005

  3. Страуструп Б. Язык программирования С++. Специальное издание, 3-изд. Бином.2004