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

Методичка_2013_14_весна(1курс) / лаб_раб_ 7(граф_геом_дан)

.doc
Скачиваний:
9
Добавлен:
03.03.2016
Размер:
45.06 Кб
Скачать

50

ЛАБОРАТОРНАЯ РАБОТА №7

ПОСТРОЕНИЕ ГРАФИЧЕСКОГО ОТОБРАЖЕНИЯ ОБРАБОТКИ ГЕОМЕТРИЧЕСКИХ ДАННЫХ

Цель работы: Освоение методов разработки алгоритмов, составления и отладки программ для обработки геометрических данных.

7.1 Требования к выполнению работы:

  • Для всех заданий вначале составить блок-схему алгоритма, а затем программу.

  • Предусмотреть вывод на печать исходных данных, промежуточных и результирующих данных.

  • В работе необходимо для задания координат точек на плоскости использовать два одномерных или один двумерный массив.

  • Продемонстрировать работу программы с помощью графических построений.

Дополнительные требования

  • Предусмотреть возможность изменения масштаба.

  • Предусмотреть возможность изменения цвета.

7.2 Пример решения задачи

Пример. Задано множество точек на плоскости. Разделить их на точки, лежащие выше диагонали первого квадрата и на точки, лежащие ниже диагонали. Найти точку, наиболее удаленную от начала координат. Выделить точки, расположенные выше диагонали белым цветом, а ниже – зеленным Найденное наибольшее расстояние выделить красным цветом. Показать диагональ первого квадрата.

Текст программы.

void main()

{

int xvn,xvk,xgn,xgk,yvn,yvk,ygn,ygk,xkon,ykon;

float x[20], y[20],maxx,maxy,minx,miny,mx,my,d,dmax;

int i,kx,ky,nt,r;

char s[4];

//Расчет масштаба

maxx=-1000;

maxy=-1000;

for (i=0; i<20;i++)

{x[i]=0.0005*rand();

y[i]=0.0005*rand();

printf("\n %6.1f %6.1f",x[i], y[i]);

if (y[i]>maxy) maxy=y[i];

if (x[i]>maxx) maxx=x[i];

}

printf("\n %6.1f %6.1f",maxx, maxy);

my=400/(maxy);

mx=600/(maxx);

if (my<mx) mx=my;

if (my>mx) my=mx;

printf("\n %6.1f %6.1f",mx, my);

getch();

{Инициализация графического режима}

//Рисование координатных осей

setbkcolor(1);

setcolor(15);

xvn=40;

xvk=40;

yvn=20;

yvk=460;

xgn=20;

xgk=620;

ygn=460;

ygk=460;

line(xvn,yvn,xvk,yvk);

line(xgn,ygn,xgk,ygk);

outtextxy(xvn+6,yvn-9,"y");

outtextxy(xgk-6,ygk+9,"x");

ykon=int(maxy)+1;

xkon=int(maxx)+1;

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

{ ky=ygn-int(my*i);

setcolor(8);

line(xvn,ky,(xvn+int(mx*xkon)),ky);

sprintf(s,"%d",i);

setcolor(15);

outtextxy(xvn-20,ky,s);

}

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

{ kx=xvn+int(my*i);

setcolor(8);

line( kx,ygn,kx, ygn-int (mx*ykon));

sprintf(s,"%d",i);

setcolor(15);

outtextxy(kx,ygk+12,s);

}

//////////////////////////

setcolor(15);

line(xvn,ygn,xvn+int(xkon*mx),ygn-int(ykon*my));

//Разделение и построение точек

for (i=0; i<20;i++)

{

kx=xvn+int(x[i]*mx);

ky=ygn-int(y[i]*my);

r=2;

if(y[i]>x[i]) { setcolor(WHITE);circle(kx,ky,r); }

if(y[i]<x[i]) { setcolor(GREEN);circle(kx,ky,r); }

}

//Нахождение точки, наиболее удаленной от начала координат

dmax=0;

for (i=0; i<20;i++)

{d=sqrt(pow(x[i],2)+pow(y[i],2));

if (d>dmax){dmax=d; nt=i;}

}

//Построение расстояния между началом координат и найденной точкой

r=3;

kx=xvn+int(x[nt]*mx);

ky=ygn-int(y[nt]*my);

setcolor(RED);circle(kx,ky,r);

setfillstyle(1,4);

floodfill(kx,ky,4);

setlinestyle(0,1,3);

line(xvn,ygn,kx,ky);

getch();

closegraph();

7.2 Условие заданий:

  1. Заданы окружность с помощью координат центра и радиуса. Определить, в каких четвертях она расположена.

  1. Заданы координаты квадрата и координаты 10 точек. Определить какая из точек, к какой вершине квадрата лежит ближе всего.

  1. Заданы две пересекающиеся прямые, с помощью 4 точек. Найти координаты точки пересечения и расстояния от нее до заданных точек.

  1. Заданы две пересекающиеся прямые, с помощью 4 точек. Найти площади двух смежных треугольников, лежащих между этими прямыми.

  1. Заданы две пересекающиеся прямые, с помощью 4 точек. Определить площадь наибольшего из треугольников, полученных при пересечении этих прямых.

  1. Заданы координаты 10 точек. Найти длину наибольшего отрезка, соединяющего эти точки.

  1. Заданы координаты 10 точек. Найти точку, имеющую наибольшее расстояние до начало координат, и величину этого расстояния.

  1. Заданы координаты 16 точек. Найти длину ломаной, соединяющей точки в порядке номеров.

  1. Заданы координаты 12 точек. Найти наибольшую площадь круга, построенного по двум точкам – центр и точка на окружности.

  1. Заданы координаты 28 точек. Разделить их на 4 части: лежащие в различных четвертях координатной плоскости.

  1. Заданы координаты 20 точек, лежащих в первой четверти. Разделить их на две части: лежащие выше биссектрисы первой четверти и ниже ее.

  1. Заданы координаты 20 точек. Разделить их на две части: лежащие выше оси абсцисс и ниже ее.

  1. Заданы окружность, с помощью координат центра и радиуса и координаты 20 точек. Разделить точки на две части: лежащие внутри окружности и вне нее.

  1. Задана окружность, с помощью координат центра и радиуса. Определить, лежит ли она полностью в первой четверти.

  1. Заданы координаты 6 точек. Определить площадь многоугольника.

  1. Заданы квадрат, с помощью координат четырех углов, стороны которого параллельны осям, и координаты 10 точек. Найти ее точки, которые лежат внутри этого квадрата.

  1. Заданы окружность, с помощью координат центра и радиуса, и квадрат, с помощью координат вершин. Определить лежит ли квадрат внутри окружности или вне нее.

  1. Заданы окружность, с помощью координат центра и радиуса, и прямая, с помощью координат 2 точек. Определить пересекаются ли фигуры.

  1. Заданы окружность, с помощью координат центра и радиуса и квадрат, с помощью координат вершин. Определить, пересекаются ли фигуры.

  1. Заданы прямоугольник, с помощью координат четырех углов, стороны которого параллельны осям и координаты 15 точек. Найти те точки, которые лежат за пределами этого прямоугольника.

  1. Заданы координаты 5 точек. Определить площадь многоугольника.

  1. Даны координаты точек трех прямых. Выяснить, можно ли на них построить треугольник.

  1. Заданы окружность, с помощью координат центра и радиуса и треугольник, с помощью координат вершин. Определить, лежит ли треугольник внутри окружности.

  1. Заданы окружность, с помощью координат центра и радиуса и шестиугольник, с помощью координат вершин. Определить, лежит ли шестиугольник внутри.

  1. Заданы окружность, с помощью координат центра и радиуса. Определить, лежит ли окружность полностью в первой четверти.

  1. Заданы квадрат, с помощью координат четырех углов, стороны которого параллельны осям и координаты 10 точек. Разделить все точки на 2 части, те точки, которые лежат за пределами квадрата и те, которые лежат внутри квадрата.