Показать сообщение отдельно
Старый 02.03.2016, 23:06   #3 (permalink)
nikniknik2016
Новичок
 
Регистрация: 02.03.2016
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Здесь, правда, печатаются не номера точек, а их координаты

Вот код функции process, где еще печатаются номера точек:

Код:
void process()
{
  //здесь хранятся минимальное расстояние и точки, для которых это расстояние найдено
  Point min_a;
  Point min_b;
  float min_distance = NaN; //сначала минимальное расстояние не имеет значения
  unsigned min_i = -1;
  unsigned min_j = -1;
  /*
    определяем количество заданных точек
    для этого узнаем размер в байтах всего массива x_coords и делим на размер элемента в байтах
    если бы x_coords был передан в качестве указателя, то такой способ бы не подошел
  */
  const unsigned cnt_of_points = sizeof(x_coords) / sizeof(x_coords[0]);

  //запустим цикл для всех заданных точек
  for(unsigned i = 0; i < cnt_of_points; ++i)
  {
      /*
        i - индекс первой точки в паре
        j - индекс второй точки в паре
        вторую точку надо искать только из последующих точек (начиная с j = i + 1),
        т.к. предыдущие точки уже были рассчитаны
       */
      for(unsigned j = i + 1; j < cnt_of_points; ++j)
      {
        const Point a(x_coords[i], y_coords[i]); //первая точка
        const Point b(x_coords[j], y_coords[j]); //вторая точка
        const float distance = calc_distance(a, b); //расстояние между точками

        /*
          если минимальное расстояние не имеет значеня
          или
          текущее расстояние меньше минимального,
          то запоминаем текущее расстояние как минимальное,
          также запоминаем текущие точки
        */
        if(isnan(min_distance) || distance < min_distance)
        {
            min_distance = distance;
            min_a = a;
            min_b = b;
            min_i = i;
            min_j = j;
        }
      }
  }

  //отдаем полученную информацию на устройство вывода (консоль, например)
  std::cout << "min distance: " << min_distance << endl;
  std::cout << "point A: [" << min_i << "] ";
  min_a.to_std_cout();
  std::cout << endl;
  std::cout << "point B: [" << min_j << "] ";
  min_b.to_std_cout();
  std::cout << endl;
}
nikniknik2016 вне форума   Ответить с цитированием
Ads

Яндекс

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