Форум программистов, компьютерный форум CyberForum.ru

Найти растояние - C++

Восстановить пароль Регистрация
 
kabl92
67 / 0 / 0
Регистрация: 24.09.2009
Сообщений: 86
05.06.2010, 20:36     Найти растояние #1
Не могу понять с чего начать...
Найти расстояние между двумя заданными множествами точек на плоскости.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2010, 20:36     Найти растояние
Посмотрите здесь:

C++ макс и мин растояние между точками
C++ Ближайшее растояние между двумя точками до прямой
C++ как сложить/умножить/найти большее/найти меньшее/найти средние число
C++ Как расчитать растояние на координатной плоскости напрямую?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
05.06.2010, 21:10     Найти растояние #2
я так понимаю это минимальное расстояние между точками из разных множеств...
следовательно элементарный алгоритм перебора
береш 1ю точку из 1го множества и по порядку меряешь расстояние с каждой из 2го множества, фиксируешь минимальное в отдельный переменных, если нашло лучший вариант замещаешь.... даелее 2я точка из 1го множества со всеми из второго.... 3я.... итд...
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
05.06.2010, 23:03     Найти растояние #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//Найти расстояние между двумя заданными множествами точек на плоскости. 
#include <string>
#include <iostream>
#include <iomanip>
#include <vector>
#include <sstream>
#include <cmath>
#include <algorithm>
 
typedef std::string  T_str;
 
struct T_point
{
    double x_;
    double y_;
    T_point(double x = 0, double y = 0) : x_(x), y_(y)
    {}
 
    T_point(const T_str&  str_coord)
    {
        std::istringstream  in_potok(str_coord);        
        in_potok >> x_;        
        in_potok >> y_;
    }
 
    operator T_str() const
    {
        std::ostringstream  out_potok;
        out_potok << "(" << x_ << ", " << y_ << ")";
        return  out_potok.str();        
    }
 
    double distance(const T_point&  point) const
    {
        double x_shift = x_ - point.x_;
        double y_shift = y_ - point.y_;
        return sqrt(x_shift * x_shift + y_shift * y_shift);
    }
};
 
typedef std::vector<T_point>   T_points;
typedef std::vector<T_points>  T_point_sets;
typedef std::vector<double>    T_distances;
 
double get_dist(T_point_sets  point_sets)
{
    T_distances  distances;
    //Обходим все точки первого множества и находим для каждой из них
    //расстояние для каждой точки второго множества, и записываем это
    //расстояние в distances.
    for(T_points::const_iterator set1_it = point_sets[0].begin();
        set1_it != point_sets[0].end(); ++set1_it)
    {
        for(T_points::const_iterator set2_it = point_sets[1].begin();
            set2_it != point_sets[1].end(); ++set2_it)
        {
            distances.push_back(set1_it->distance(*set2_it));
        }
    }
    return *std::min_element(distances.begin(), distances.end());
}
 
int main()
{
    std::locale::global(std::locale("rus"));
    T_point_sets  point_sets(2);
    for(int point_set_ind = 0; point_set_ind < point_sets.size(); ++point_set_ind)
    {
        std::cout << std::endl
                  << "Введите координаты точек "
                  << point_set_ind + 1
                  << "-го множества"
                  << std::endl
                  << " (парами через пробел, конец ввода - пустая строка):"
                  << std::endl;
        for(int point_ind = 1; ; ++point_ind)
        {
            std::cout  << "точка " << point_ind << ": ";
            T_str  str_point_coords;
            getline(std::cin, str_point_coords);
            if(str_point_coords.empty()) break;
            point_sets[point_set_ind].push_back(str_point_coords);
        }        
    }
    std::cout << std::endl;
    for(int point_set_ind = 0; point_set_ind < 2; ++point_set_ind)
    {
        std::cout << std::endl
                  << point_set_ind + 1 << "-е множество:" << std::endl;       
        for(size_t  point_ind = 0; 
            point_ind < point_sets[point_set_ind].size(); ++point_ind)
        {
            std::cout << "точка " 
                      << point_ind + 1 
                      << ": " 
                      << T_str(point_sets[point_set_ind][point_ind])                                            
                      << std::endl;
        }
    }
 
    std::cout << std::endl
              << std::endl
              << "Расстояние между этими множествами равно: "
              << get_dist(point_sets)
              << std::endl;
    return 0;
}
Yandex
Объявления
05.06.2010, 23:03     Найти растояние
Ответ Создать тему
Опции темы

Текущее время: 02:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru