Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
weal
0 / 0 / 1
Регистрация: 27.01.2014
Сообщений: 25
1

Отсортировать массив сфер по возрастанию количества содержащихся в них точек

16.02.2015, 00:13. Просмотров 348. Ответов 6
Метки нет (Все метки)

Здравствуйте.

Помогите пожалуйста с задачей!

На вход подается некоторое количество именованных точек R3 (заданы координатами и названием из одной буквы) и некоторое количество сфер (заданы центром и радиусом). Отсортировать сферы по возрастанию количества содержащихся в них точек, затем вывести на экран.

Буду очень благодарен за помощь.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2015, 00:13
Ответы с готовыми решениями:

Отсортировать массив по возрастанию количества цифр, встречающихся в записи числа
Дан массив целых положительных чисел b1,b2,...,bn.Отсортировать массив по...

Отсортировать массив по убыванию, затем добавить недостающий элемент и отсортировать массив по возрастанию
2) В массиве a ...a встречаются по одному разу все целые числа от 0 до n, кроме...

Исходную матрицу отсортировать по возрастанию количества положительных элементов в столбцах
Задача: Исходную матрицу отсортировать по возрастанию количества положительных...

Отсортировать все строки методом быстрой сортировки так, чтоб элементы в них располагались по возрастанию
Всем привет:) Не могу никак сделать, помогите, кто шарит) Есть массив 10 на...

Отсортировать массив по возрастанию
Задан массив из 10 элементов, отсортировать его по возрастанию. Помогите,...

6
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
16.02.2015, 18:16 2
Математическая модель есть?
0
The535
26 / 26 / 18
Регистрация: 16.01.2014
Сообщений: 161
16.02.2015, 18:53 3
Ой... Если правильно помню из аналитической геометрии, то надо просто проверять следующее:
Пусть {x}_{i}, {y}_{i}, {z}_{i} - координаты точек.
Пусть {x}_{j}, {y}_{j}, {z}_{j} - координаты середин сфер.
Пусть R - радиус.
Тогда нужно делать следующую проверку.
Тогда, если корень из суммы квадратов первых \leq (корень суммы квадратов вторых) + R, то точка входит в сферу.
Смотрим у какой сферы сколько точек входит, и сортируем.
0
weal
0 / 0 / 1
Регистрация: 27.01.2014
Сообщений: 25
16.02.2015, 19:59  [ТС] 4
нужно проверить, выполняется ли неравенство или нет

http://www.cyberforum.ru/cgi-bin/latex.cgi?(x_0-x)^2+(y_0-y)^2+(z_0-z)^2 \lt R^2

Добавлено через 1 час 3 минуты
Проблема в том, что это нужно реализовать через классы. Просто прогу, считающую это, я без проблем напишу. А тут классы( Буду очень благодарен за помощь!
0
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
16.02.2015, 20:19 5
Что классом-то должно быть? Точки? Сферы? Или класс-контейнер должен быть?
0
weal
0 / 0 / 1
Регистрация: 27.01.2014
Сообщений: 25
16.02.2015, 20:34  [ТС] 6
точки, сферы
0
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
16.02.2015, 23:11 7
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
108
109
110
#include <cstdlib>
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
 
using std::cin;
using std::cout;
 
 
class Point
{
protected:
    char name;
    double x, y, z;
public:
    Point(double ax = 0, double ay = 0, double az = 0, char aname = ' '): x(ax), y(ay), z(az), name(aname) {}
    char getname() const
    {
        return name;
    }
    double getx() const
    {
        return x;
    }
    double gety() const
    {
        return y;
    }
    double getz() const
    {
        return z;
    }
};
 
class Sphere: public Point
{
    double r;
    int count;
    std::set<char> names;
public:
    Sphere(double ax = 0, double ay = 0, double az = 0, double ar = 0): Point(ax, ay, az), r(ar), count(0) {}
    double getr() const
    {
        return r;
    }
    int getcount() const
    {
        return count;
    }
    bool IsInside(const Point &p)
    {
        double dx = x - p.getx();
        double dy = y - p.gety();
        double dz = z - p.getz();
        if (dx * dx + dy * dy + dz * dz < r * r)
        {
            ++count;
            names.emplace(p.getname());
            return true;
        }
        return false;
    }
    bool operator < (const Sphere &s)
    {
        return count < s.count;
    }
    friend std::ostream & operator << (std::ostream &os, const Sphere &s)
    {
        os << "x: " << s.x << " y: " << s.y << " z: " << s.z << " r: " << s.r << " points: ";
        for (char n : s.names)
        {
            os << n << " ";
        }
        os << std::endl;
        return os;
    }
};
 
int main()
{
    std::vector<Point> pp;
    pp.push_back(Point(1, 2, 3, 'A'));
    pp.push_back(Point(1, 3, 3, 'B'));
    pp.push_back(Point(3, 2, 3, 'C'));
    pp.push_back(Point(2000, 200, 1, 'D'));
 
    std::vector<Sphere> ss;
    ss.push_back(Sphere(0, 0, 0, 100));
    ss.push_back(Sphere(1000, 2, 3, 100));
    ss.push_back(Sphere(2000, 233, 3, 100));
 
    for (Sphere &s : ss)
    {
        for (const Point &p : pp)
        {
            s.IsInside(p);
        }
    }
 
    cout << std::endl << std::endl;
 
    std::sort(ss.begin(), ss.end());
 
    for (const Sphere &s : ss) cout << s;
 
 
    cout << std::endl;
    system("pause");
}
Допиливай.
0
16.02.2015, 23:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2015, 23:11

отсортировать массив по возрастанию
#include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #define N 10...

Отсортировать массив по возрастанию
Отсортировать массив по возрастанию методом поиска минимального элемента.

Отсортировать массив по возрастанию
подскажите пожалуйста #include &lt;iostream&gt; #include &lt;iomanip&gt; #include...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru