Разработка функций, рисующих на экране незакрашенный или закрашенный параллелограмм и два вложенных один в другой параллелограмма, внешний из которых закрашен (Лабораторная работа № 1)

Страницы работы

Содержание работы

Министерство образования и науки Российской Федерации

Новосибирский Государственный Технический Университет

Кафедра Прикладной Математики

Лабораторная Работа №1

По Объектно-Ориентированному Программированию

Факультет: ПМИ

Группа: ПМ-71

Студент: Павлов А.В.

Преподаватель: Лисицкий Д.В.

Новосибирск, 2008

1. Задание

Разработать функции, рисующие на экране следующие геометрические фигуры:

      – незакрашенный параллелограмм,

      – закрашенный параллелограмм,

      – два вложенных один в другой параллелограмма, внешний параллелограмм закрашен за  исключением пространства внутреннего параллелограмма.

Разработать программу, демонстрирующую выполнение указанных функций, обеспечить ввод пользователем параметров фигур (координат и др.), параметров рисуемых линий и закраски. Включить в программу проверки нахождения фигуры в пределах экрана и вложенности двух фигур.

2. Описание функций

Parallelogram() – строит не закрашенный параллелограмм по 3-м координатам (вершины параллелограмма).

chkbndscr() – проверка попадания фигуры на экран. Необходимо ввести координаты параллелограмма, результат: при выходе фигуры за границу экрана – сообщение об ошибке.

GoodIns() – проверка на вложенность двух фигур. Необходимо ввести координаты двух параллелограммов, сначала большего (содержащего), затем меньшего (вложенного).

colorParal() – закрашенный параллелограмм. То же, что и Parallelogram(), но результат – закрашенный параллелограмм.

cutParal() – два вложенных параллелограмма. Для каждого параллелограмма вводятся его параметры: координаты трех вершин. Внешний ромб будет закрашенным, а внутренний – пустым, если проверка на вложенность GoodIns() сообщила о корректности данных.

Options() – графические опции.  Для линий указываются толщина, тип, цвет, а для заливки – тип и цвет. Результат – линии и заливка фигур будут такими, какими их выбрал пользователь.

Menu() – демонстрационное меню. Вызывает функции Parallelogram(), colorParal(), cutParal() и Options(), в зависимости от указаний пользователя.

main() – основная функция программы. Подключение графического режима, вызов Menu() и отключение графического режима по завершении работы программы.

3. Алгоритм

//

void Parallelogram()

Ввод x1, y1 x2, y2, x3, y3;

 x4= x1+x3-x2;

 y4=y1+y3-y2;

Рисовать(typeLine,colorLine,fatLine): линия(x1,y1,x2,y2); линия(x2,y2,x3,y3); линия(x3,y3,x4,y4); линия(x4,y4,x1,y1);

 chkbndscr();

//

int chkbndscr();

При i=1 Повторять

   Если ( xi<0 или xi>max(x) или yi<0 или yi>max(y) ), то Печать_ошибка;

Пока i<=4;

//

void colorParal()

Запомнили тип линий;

Тип линии – сплошной;

Parallelogram();

Залить_пар-м(colorFill);

Рисуем границу черной;

Рисуем границу нужного типа и цвета;

//

int GoodIns()

a=длина линии(1-4)=;

b=длина линии(1-2)=

sin=

S=sin*a*b;

 От каждой точки 1-4 внешнего пар-ма считаем площади треугольников до вершин внутреннего: 5-8. Складываем значения площадей для каждой из вершин 1-4, и если хотя бы одна из этих площадей будет больше S, то пар-м с вершинами 5-8 не вложен.

//

void cutParal()

 colorParal();

Тип линии – сплошной;

x8= x5+x7-x6;

 y8=y5+y7-y6;

Рисовать: линия(x8,y8,x5,y5); линия(x5,y5,x6,y6); линия(x6,y6,x7,y7); линия(x7,y7,x8,y8);

Если (GoodIns=0), то Печать_ошибка;

Иначе Залить внутренний пар-м черным цветом;

4. Программа

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

int gmode;

int x[9],y[9];

int fatLine=1, typeLine=0, colorLine=15,

    typeFill=1, colorFill=7;

int chkbndscr()

{

 int i,mx,my;

 mx=getmaxx();

 my=getmaxy();

 settextstyle(2,0,6);

 for(i=1;i<=4;i++)

  {

   if (x[i]<0 || x[i]>mx || y[i]<0 || y[i]>my)

    {

     outtextxy (150,100,"Error!!! Image is beyond the screen!");

     return 1;

    }

  }

  return 0;

}

void Parallelogram()

{

 printf("Please Enter paral's coordinates (x,y)  ");

 scanf("%d%d%d%d%d%d", &x[1],&y[1],&x[2],&y[2],&x[3],&y[3]);

 x[4]=x[1]+x[3]-x[2];

 y[4]=y[1]+y[3]-y[2];

 setlinestyle (typeLine,0,fatLine);

 setcolor(colorLine);

 line (x[1],y[1],x[2],y[2]);

 line (x[2],y[2],x[3],y[3]);

Похожие материалы

Информация о работе