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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Maxak
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 47
#1

Как сгенерить два массива с неповторяющимися "случайными" точками (X, Y)? - C++

09.08.2013, 17:34. Просмотров 338. Ответов 7
Метки нет (Все метки)

Добрый вечер! Помогите пожалуйста с задачей. есть структура:
C++
1
struct{ double X; double Y;}
Нужно сгенерировать два массива с уникальными случайными (можно псевдослучайными, это не важно) точками. C количеством точек порядка ~1000000.
Как это лучше сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2013, 17:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сгенерить два массива с неповторяющимися "случайными" точками (X, Y)? (C++):

Для массива из 10 чисел проверить, есть ли в нем два одинаковых числа и напечатать "да" или "нет" - C++
void check_same(const int* a) { for (const int* p = a; p < a + 9; p++) for (const int* q = p+1; q < a + 10; q++) ...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно". Я так...

Два новых массива переходов через "0" - C++
имеется массив double x = { 0.2, -0.02, 0.6, 0.98, 0.5, -0.35, 1.5}; необходимо создать код, который создает заполняет два...

Два числа, действительное "a" и натуральное "n" вводятся с клавиатуры - C++
Два числа, действительное "a" и натуральное "n" (n>=10) вводятся с клавиатуры, необходимо найти значение выражения : ...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Как отключить автоматическое добавление "_" "@" "number" к имени экстернального метода? - C++
Здраствуйте! Подскажите как это делается? (вопрос в названии темы) среда : VS2013 проект компилируется в dll файл в начале...

7
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.08.2013, 17:38 #2
Точка с вещественными координатами? Какой диапазон значений? Для чего нужны эти точки в дальнейшем?
0
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
09.08.2013, 17:45 #3
Как вариант держать множество точек std::set,генерировать точку примерно так point():x=rand(),y=rand(){};
И проверять есть ли созданная точка в множестве.А потом,если нужно будет,с множества можно и в массив перевести.
0
Maxak
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 47
09.08.2013, 17:55  [ТС] #4
Цитата Сообщение от Tulosba Посмотреть сообщение
Точка с вещественными координатами? Какой диапазон значений? Для чего нужны эти точки в дальнейшем?
Вещественными, Point<double, double>. Диапазон не важен, но так что бы можно было умножить координаты точек и не вылететь за пределы double.
Эти точки будут записываться в файл. Потом считываться и различными способами для каждой точки из одного массива будет искаться кратчайшее расстояние до точек другого массива.
Эти точки будут служить модельными данными.
Я написал свой способ генерации таких точек, но на 100000 точек он у меня висит уже около часа.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.08.2013, 18:15 #5
Maxak, я бы наверное разделил диапазон по каждой координате на 1000 частей (равномерно).
Засунул всё это в 2 вектора, перемешал бы их random_shuffle(), а потом прошелся бы двойным циклом для выдачи двумерной точки. Итоговый набор точек будет уникальным, но будет какая-то одна координата повторятся 1000 раз пока не сменится. Если это критично, то нужно будет немного усложнить алгоритм выдачи вместо двух вложенных циклов.
1
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
09.08.2013, 18:27 #6
Цитата Сообщение от Maxak Посмотреть сообщение
Нужно сгенерировать два массива с уникальными случайными (можно псевдослучайными, это не важно) точками. C количеством точек порядка ~1000000.
Как это лучше сделать?
я хочу заметить, что тут нужно уточнить ещё и вопрос, что такое "уникальные точки"?
вот
точка {0.0 , 0.0}
и
точка {1e-38 , 1e-38}
это одинаковые координаты точек или нет?
Вроде разные, а расстояние между ними будет 0
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.08.2013, 18:32 #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
это одинаковые координаты точек или нет?
Я думаю, если p1.x == p2.x && p1.y == p2.y, то точки одинаковые. Иначе можно всё слишком усложнить.
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
09.08.2013, 18:53 #8
В любом случае, бери такой вариант. Вероятность получить одинаковые точки КРАЙНЕ МАЛА.
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
#include <iostream>
#include <cmath>
#include <ctime>
#include <CLIMITS>
using namespace std;
double get_rand(){
    const size_t sizeofDouble=8;
    union{
        double dat;
        unsigned char bytes[sizeofDouble];
    }dvalue;
    for (int i=0; i<8; i++)
        dvalue.bytes[i]=rand()&0xFF;
    return dvalue.dat;
}
 
int main(){
    const int count=20;
    srand(time(NULL));
    for (int i=0; i<count; i++)
        cout<<get_rand()<<"\t: "<<get_rand()<<endl;
    cin.get();
    return 0;
}
1
09.08.2013, 18:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2013, 18:53
Привет! Вот еще темы с ответами:

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Два класса: "Студент" и "Курс" - C++
Дано 2 класса: stud, содержащий сведения о студенте (фамилия, вуз, номер группы) и курс, содержащий номер курса. Все сведения находятся в...


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

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

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