МИНИСТЕРСТВО ОБРАЗОВАНИЯ РФ
НГТУ
КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ
РАСЧЕТНО ГРАФИЧЕСКАЯ РАБОТА № 1
ПО ДИСЦИПЛИНЕ:
ЛАБОРАТОРНЫЕ МЕТОДЫ ПРОГРАММИРОВАНИЯ
ГРУППА: ПМ-21
СТУДЕНТ: Воронов А.С.
ПРЕПОДАВАТЕЛЬ: Хиценко В. П.
НОВОСИБИРСК 2002 г.
Из заданного точек на плоскости выбрать две различные точки, так что бы окружности заданного радиуса с центром в эти точках содержали внутри себя одинаковые количество точек.
Дано: Множество точек {(x1,y1), (x2,y2),…,(xn,yn) | x,y Î R, n Î N} и два радиуса r1, r2 Î R
Результат: Координаты двух различных точек
Основные подзадачи:
1) Ввод данных
2) Расчет количества точек попадающих в окружности
3) Нахождение двух окружностей с равным содержанием точек, разными центрами и радиусами
4) Вывод координат центов этих окружностей
Метод решения:
Находим количество точек лежащих в окружности с радиусом r1 и центрами в точках (xi,yi), iÎ[1..n]
Находим количество точек лежащих в окружности с радиусом r2 и центрами в точках (xi,yi), iÎ[1..n]
Находим две окружности с различными центрами и радиусами, но с равным количеством содержащихся в них точек.
Множество точек {(x1,y1), (x2,y2),…,(xn,yn) | x,y Î R, n Î N} и два радиуса r1, r2 Î R
Центры двух искомых окружностей (a1,b1), (a2,b2) a1,b1,a2,b2
Множества T11…T1n и T21…T2n – множества содержащие количество точек лежащих в окружностях с радиусами r1, r2 и центрами в точках (xn,yn)
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define n 5
void input (float X[n],float Y[n]) // Ввод координат
{
int k;
printf ("Введите пары координат точек (x,y)\nВсего %d",n);
printf (" штук\n");
k=0;
while (k<=n-1)
{
scanf ("%f%f",&X[k],&Y[k]);
k++;
}
}
void main ()
{
float X[n],Y[n],r1,r2,a,b;
int i,j,T1[n],T2[n],c;
clrscr ();
input (X,Y);
printf ("Введите длины двух радиусов\n");
scanf ("%f%f",&r1,&r2);
a=r1*r1;
b=r2*r2;
i=0;
j=0;
while (i<=n-1)
{ // 2
T1[i]=-1;
T2[i]=-1;
while (j<=n-1)
{ // 3
if ((X[i]-X[j])*(X[i]-X[j])+(Y[i]-Y[j])*(Y[i]-Y[j])<=a) T1[i]++;
if ((X[i]-X[j])*(X[i]-X[j])+(Y[i]-Y[j])*(Y[i]-Y[j])<=b) T2[i]++;
j++;
} // 3
i++;
j=0;
} // 2
i=0;
j=1;
a=0;
b=0;
while (i<=n-1)
{ // 4
while (j<=n-1)
{ // 5
if (T1[i]==T2[j])
{ // 6
if (T1[i]>a) {a=T1[i]; b=i; c=j;}
} // 6
j++;
} // 5
i++;
j=1+i;
} // 4
printf ("Центры искомых окружностей в \n(%f",X[b]);
printf (",%f",Y[b]);
printf (") - центр 1-ой окружности с радиусом %f",r1);
printf ("\n (%f",X[c]);
printf (",%f",Y[c]);
printf (") - центр 2-ой окружности с радиусом %f",r2);
getch ();
}
№ теста |
1-ая точка |
2-ая точка |
3-ая точка |
4-ая точка |
5-ая точка |
1-ый радиус |
2-ой радиус |
Центр 1-ой |
Центр 2-ой |
1 |
(1,2) |
(2,2) |
(3,3) |
(3,1) |
(3,-1) |
1 |
2 |
(1,2) |
(3,-1) |
2 |
(2,2) |
(2,3) |
(-1,-1) |
(-1.5, -1.5) |
(-1,-2) |
1 |
2 |
(-1,-1) |
(-1.5 -1.5) |
3 |
(2,2) |
(2,3) |
(-1,-1) |
(-1.5, -1.5) |
(-1,-2) |
2 |
1 |
(-1,-1) |
(-1.5, -1.5) |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.