Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
3 / 3 / 2
Регистрация: 22.11.2011
Сообщений: 168

Программа нахождении минимально удалённой точки от других точек

03.01.2012, 11:07. Показов 4206. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть идеи как это можно сделать?

те ты вводиш кооординаты двух или нескольких точек, программа должна найти минимальное расстояние от каждой точки до других и вывести эту минимальную удалённую точку

программа должна быть со структурой х и y и функцией считающей расстояние
структуру и функцию я создал, осталось самое главное нахождение точки
а расстояние я находил по формуле sqrt((x2-x1)^2+(y2-y1)^2)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.01.2012, 11:07
Ответы с готовыми решениями:

Найти координаты точки наиболее удалённой от начала координат. Если таких точек несколько, вывести первую найденную
Прошу прощения. Тема закрыта (модератор, удалите) Сам нашел ошибку. :)

Задать n точек. Найти m=3,4... точек и построить на них m-угольник такой что, количество точек , лежащих внутри и вне m-угольника , минимально различа
Задать n точек. Найти m=3,4... точек и построить на них m-угольник такой что, количество точек , лежащих внутри и вне m-угольника ,...

Найти координаты точки, зная расстояние до других точек
Здравствуйте! Нужна помощь в решении задачи. Сам даже не знаю с чего подступить, совсем геометрию забыл. Есть 4 точки в трехмерной...

8
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.01.2012, 13:12
Сложить расстояния от точки до всех остальных и найти наименьшее.
1
3 / 3 / 2
Регистрация: 22.11.2011
Сообщений: 168
03.01.2012, 21:38  [ТС]
Это легко написать словами, код написать намного сложнее, по крайней мере для меня.
Вот начал, не знаю как дальше быть.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<math.h>
#include<stdio.h>
#include<conio.h>
struct tchk
{
    int x, y;
};
float rast(tchk a, tchk b)
{
    float x, y, d;
    x = b.x - a.x;
    y = b.y - a.y;
    d = sqrt(x*x + y*y);
    return d;
}
int main()
{
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.01.2012, 22:43
Не тестировал. Но работать должен.
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
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
 
template <class T> T sqr(T a) { return a * a; }
 
class Point 
{
    float x;
    float y;
    
public:
    Point(): x(0), y(0)
    {
        
    }
    
    friend std::istream& operator >> (std::istream& stream, Point& p)
    {
        stream >> p.x;
        stream >> p.y;
        return stream;
    }
    
    friend std::ostream& operator << (std::ostream& stream, const Point& p)
    {
        stream << '(' << p.x << "; " << p.y << ')';
        return stream;
    }
    
    friend float distanceTo(Point p1, Point p2)
    {
        return sqrt(sqr(p1.x - p2.x) + sqr(p1.y - p2.y));
    }
};
 
int main()
{
    typedef std::vector<Point> VecPoint;
    typedef VecPoint::iterator VecPointItr;
    typedef std::vector<float> VecFloat;
    const int size = 10;
    std::vector<Point> points(size);
    for(VecPointItr it = points.begin(); it != points.end(); ++it)
        std::cin >> *it;
    VecFloat d;
    for(int i = 0; i < size; ++i)
    {
        float sum = 0;
        for(int j = 0; j < i; ++j)
            sum += distanceTo(points.at(i), points.at(j));
        for(int j = i + 1; j < size; ++j)
            sum += distanceTo(points.at(i), points.at(j));
        d.push_back(sum);
    }
    int pos = std::min_element(d.begin(), d.end()) - d.begin();
    std::cout << "min #" << pos << ", = " << points.at(pos) << std::endl;
    return 0;
}
2
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
03.01.2012, 22:57
Чет я многабукаф использовал.
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
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <iostream>
 
class Point {
 public:
  Point() : x_(0.), y_(0.) {}
  Point(float x, float y) : x_(x), y_(y) {}
  float getX() const { return x_; }
  float getY() const { return y_; }
  float getDistanceTo(const Point &point) const {
    return sqrt(pow(point.getX() - getX(), 2.) +
      pow(point.getY() - getY(), 2.));
  }
  static Point randomPoint() {
    return Point((rand() % 1000) / 100., (rand() % 1000) / 100.);
  }
 private:
  float x_, y_;
};
 
std::ostream &operator<<(std::ostream &stream, const Point &point) {
  return stream << "[" << point.getX() << ":" << point.getY() << "]";
}
 
float sumOfDistances(size_t id, const Point *points, size_t size) {
  float sum = 0.;
  for (size_t i = 0; i < size; ++i)
    if (i != id)
      sum += points[id].getDistanceTo(points[i]);
  return sum;
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
  size_t numberOfPoints = 10;
  Point *points = new Point[numberOfPoints]();
 
  std::cout << "Points: ";
  for (size_t i = 1; i < numberOfPoints; ++i)
    std::cout << (points[i] = Point::randomPoint()) << " ";
  std::cout << std::endl;
 
  size_t minPointId = 0;
  float minPointDistanceSum = sumOfDistances(minPointId, points, numberOfPoints);
  for (size_t i = 1; i < numberOfPoints; ++i) {
    float currentPointDistanceSum = sumOfDistances(i, points, numberOfPoints);
    if (currentPointDistanceSum < minPointDistanceSum) {
      minPointDistanceSum = currentPointDistanceSum;
      minPointId = i;
    }
  }
 
  std::cout << "Closest point: " << points[minPointId] << std::endl <<
    "Sum of distances: " << minPointDistanceSum << std::endl;
  
  delete [] points;
  return 0;
}
1
3 / 3 / 2
Регистрация: 22.11.2011
Сообщений: 168
04.01.2012, 10:06  [ТС]
soon, lemegeton, спасибо. Это у вас на С++ написано? Что-то для меня большая часть абра-кадабра... наверное я изучаю язык Си без ++
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.01.2012, 10:29
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
#include <stdio.h>
#include <math.h>
 
float sqr(float a) { return a * a; }
 
typedef struct
{
    float x;
    float y;
} Point;
 
float distance(Point p1, Point p2)
{
    return sqrt(sqr(p1.x - p2.x) + sqr(p1.y - p2.y));
}
 
float* min_element(float* first, float* last)
{
    float* min = first;
    for(++first; first != last; ++first)
        if(*first < *min)
            min = first;
    return min;
}
 
int main(void)
{
    int size = 10;
    Point points[size];
    float d[size];
    int i, j;
    for(i = 0; i < size; ++i)
        scanf("%f%f", &points[i].x, &points[i].y);
    for(i = 0; i < size; ++i)
    {
        float sum = 0;
        for(j = 0; j < i; ++j)
            sum += distance(points[i], points[j]);
        for(j = i + 1; j < size; ++j)
            sum += distance(points[i], points[j]);
        d[i] = sum;
    }
    int pos = min_element(d, d + size) - d;
    printf("min #%d, = (%f; %f)\n", pos, points[pos].x, points[pos].y);
    return 0;
}
1
3 / 3 / 2
Регистрация: 22.11.2011
Сообщений: 168
05.01.2012, 21:04  [ТС]
soon, спасибо.

А как можно сделать так чтобы если бы таких точек было несколько, прога их всех бы выводила?
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.01.2012, 21:07
Цитата Сообщение от nicenice Посмотреть сообщение
А как можно сделать так чтобы если бы таких точек было несколько, прога их всех бы выводила?
После нахождения минимального элемента пройдите по массиву, узнайте номера всех элементов с такой же суммой и выведите их.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.01.2012, 21:07
Помогаю со студенческими работами здесь

Определить точки, расстояние между которыми минимально, а сами точки находятся в одной четверти
Случайным образом формируются координаты X и Y 60 точек. Диапазон значений координат от -150 до +150. Вывести список точек, расстояние...

Для каждой четверти напечатать точки, принадлежащие ей, и две точки, расстояние между которыми минимально.
Как можно это реализовать ? Случайным образом формируются координаты X и Y 100 точек. Диапазон значений координат от -150 до +150....

Для каждой четверти напечатать точки, принадлежащие ей, и две точки, расстояние между которыми минимально.
Только начали проходить массивы, люди помогите пожалуйста с решением этой задачи, буду признателен. Случайным образом формируются...

Ошибка в нахождении точек пересечения
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main(int argc, char *argv) { int...

Необходима помощь в нахождении точки!
Задача такая: Найти 3 любые точки пересечения тремя методами: Сканирования, Улучшенным сканированием и Итерацией. Рисунок вложен. ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru