Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 09.12.2015, 19:44   #1 (permalink)
Ана99
Новичок
 
Регистрация: 06.12.2015
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Задано множество точек в трехмерном пространстве

Задано множество точек в трехмерном пространстве. Найти минимум радиусов шаров с центрами в этих точках, содержащих ровно n точек этого множества.
Помогите пожалуйста! FreePascal или PascalABC.NET
Ана99 вне форума   Ответить с цитированием

Старый 09.12.2015, 19:44
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Скорее всего проблема уже была решена ранее в других обсуждениях

Рассчитать количество точек на плоскости
C#. Координаты точек
Списки точек и векторов
Ноутбук не видит точек доступа к WiFi
Вывод результата. Множество
Тип, множество

Старый 09.12.2015, 19:56   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,359
Сказал(а) спасибо: 289
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Да... весёлая задачка. Завтра с утра поразмыслю - раньше, увы, не получится.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 10.12.2015, 11:24   #3 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,359
Сказал(а) спасибо: 289
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Получите:
Код:
Const
 Mmax=12; {Maximal number of points}

Type
 Coord=Record
        x,y,z:Integer;
       end;
 Ar=Array[1..Mmax] of Real;

Var
 M,N,i,j:Byte;
 Pnts:Array[1..Mmax] of Coord;
 Dist:Array[1..Mmax] of Ar;
 R:Ar;
 Rmin:Real;

Procedure Bubble(Q:Byte; var A:Ar);
var
 g,h:byte;
 D:real;
begin
 for g:=1 to Q-1 do
  for h:=1 to Q-g do
  if A[h]>A[h+1] then
   begin
    D:=A[h];
    A[h]:=A[h+1];
    A[h+1]:=D;
   end;
end;

Begin
 Randomize;

 M:=100;
 While M>Mmax do
  begin
   write('Global number of points = ');
   readln(M);
   if M>Mmax then writeln('Error: too many points!');
  end;

 N:=M+1;
 While N>=M do
  begin
   write('Number of points in sphere = ');
   readln(N);
   if N>=M then writeln('Error: too many points!');
  end;
 writeln;

 for i:=1 to M do
  begin
   Pnts[i].x:=-50+Random(101);
   Pnts[i].y:=-50+Random(101);
   Pnts[i].z:=-50+Random(101);
   writeln(i:3,'  x = ',Pnts[i].x:3,'  y = ',Pnts[i].y:3,'  z = ',Pnts[i].z:3);
  end;
 writeln('Press "Enter" to continue');
 readln;

 for i:=1 to M do
  for j:=1 to M do
   Dist[i][j]:=Sqrt(Sqr(Pnts[i].x-Pnts[j].x)+
                    Sqr(Pnts[i].y-Pnts[j].y)+
                    Sqr(Pnts[i].z-Pnts[j].z));

 for i:=1 to M do
  begin
   for j:=1 to M do write(Dist[i][j]:6:1);
   writeln;
  end;
 writeln('Press "Enter" to continue');
 readln;

 for i:=1 to M do Bubble(M,Dist[i]);

 for i:=1 to M do
  begin
   for j:=1 to M do write(Dist[i][j]:6:1);
   writeln;
  end;
 writeln('Press "Enter" to continue');
 readln;

 for i:=1 to M do R[i]:=Dist[i][N];

 Rmin:=200;

 for i:=1 to M do
  if R[i]<Rmin then Rmin:=R[i];

 writeln('Result: Rmin = ',Rmin:0:3);

 Readln
End.
Некоторые пояснения:
1. Задается общее количество точек в пространстве (M). Их максимальное количество ограничено двенадцатью просто для удобства вывода на экран.
2. Задается количество точек внутри шаров (N). Естественно, должно выполняться условие N<M.
3. С помощью генератора случайных чисел задаются координаты x, y, z каждой из точек. Координаты выводятся на экран.
4. Создается двумерный массив расстояний (Dist) от каждой из точек до всех остальных, включая саму точку. Результат выводится на экран.
5. Линейные массивы-строки упорядочиваются по возрастанию методом пузырька. Таким образом, имеем матрицу, каждая строка которой соответствует точке, а по столбцам - расстояния от этой точки до других точек в порядке возрастания расстояний. Результат выводится на экран.
6. Легко видеть, что число N - это ни что иное, как N-й номер столбца. Считываем этот столбец в массив R.
7. Находим в массиве R минимальный элемент.

Всё!!!
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 10:35.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.