Министерство образования и науки Российской Федерации
Новосибирский Государственный Технический Университет
Кафедра Прикладной Математики
Лабораторная Работа №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]);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.