Методичка_2013_14_весна(1курс) / лаб_раб_ 7(граф_геом_дан)
.doc
ЛАБОРАТОРНАЯ РАБОТА №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 Условие заданий:
-
Заданы окружность с помощью координат центра и радиуса. Определить, в каких четвертях она расположена.
-
Заданы координаты квадрата и координаты 10 точек. Определить какая из точек, к какой вершине квадрата лежит ближе всего.
-
Заданы две пересекающиеся прямые, с помощью 4 точек. Найти координаты точки пересечения и расстояния от нее до заданных точек.
-
Заданы две пересекающиеся прямые, с помощью 4 точек. Найти площади двух смежных треугольников, лежащих между этими прямыми.
-
Заданы две пересекающиеся прямые, с помощью 4 точек. Определить площадь наибольшего из треугольников, полученных при пересечении этих прямых.
-
Заданы координаты 10 точек. Найти длину наибольшего отрезка, соединяющего эти точки.
-
Заданы координаты 10 точек. Найти точку, имеющую наибольшее расстояние до начало координат, и величину этого расстояния.
-
Заданы координаты 16 точек. Найти длину ломаной, соединяющей точки в порядке номеров.
-
Заданы координаты 12 точек. Найти наибольшую площадь круга, построенного по двум точкам – центр и точка на окружности.
-
Заданы координаты 28 точек. Разделить их на 4 части: лежащие в различных четвертях координатной плоскости.
-
Заданы координаты 20 точек, лежащих в первой четверти. Разделить их на две части: лежащие выше биссектрисы первой четверти и ниже ее.
-
Заданы координаты 20 точек. Разделить их на две части: лежащие выше оси абсцисс и ниже ее.
-
Заданы окружность, с помощью координат центра и радиуса и координаты 20 точек. Разделить точки на две части: лежащие внутри окружности и вне нее.
-
Задана окружность, с помощью координат центра и радиуса. Определить, лежит ли она полностью в первой четверти.
-
Заданы координаты 6 точек. Определить площадь многоугольника.
-
Заданы квадрат, с помощью координат четырех углов, стороны которого параллельны осям, и координаты 10 точек. Найти ее точки, которые лежат внутри этого квадрата.
-
Заданы окружность, с помощью координат центра и радиуса, и квадрат, с помощью координат вершин. Определить лежит ли квадрат внутри окружности или вне нее.
-
Заданы окружность, с помощью координат центра и радиуса, и прямая, с помощью координат 2 точек. Определить пересекаются ли фигуры.
-
Заданы окружность, с помощью координат центра и радиуса и квадрат, с помощью координат вершин. Определить, пересекаются ли фигуры.
-
Заданы прямоугольник, с помощью координат четырех углов, стороны которого параллельны осям и координаты 15 точек. Найти те точки, которые лежат за пределами этого прямоугольника.
-
Заданы координаты 5 точек. Определить площадь многоугольника.
-
Даны координаты точек трех прямых. Выяснить, можно ли на них построить треугольник.
-
Заданы окружность, с помощью координат центра и радиуса и треугольник, с помощью координат вершин. Определить, лежит ли треугольник внутри окружности.
-
Заданы окружность, с помощью координат центра и радиуса и шестиугольник, с помощью координат вершин. Определить, лежит ли шестиугольник внутри.
-
Заданы окружность, с помощью координат центра и радиуса. Определить, лежит ли окружность полностью в первой четверти.
-
Заданы квадрат, с помощью координат четырех углов, стороны которого параллельны осям и координаты 10 точек. Разделить все точки на 2 части, те точки, которые лежат за пределами квадрата и те, которые лежат внутри квадрата.