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

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

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

C++ Два новых массива переходов через "0"
В одномерном массиве состоящим из "N" вещественных элементов вычислить сумму элемента массива с не четными "N" C++
Заполнить массив случайными неповторяющимися значениями C++
C++ работа со строкой: как заменить сочетание букв "л*г" на "лаг"
Два числа, действительное "a" и натуральное "n" вводятся с клавиатуры C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.08.2013, 17:38     Как сгенерить два массива с неповторяющимися "случайными" точками (X, Y)? #2
Точка с вещественными координатами? Какой диапазон значений? Для чего нужны эти точки в дальнейшем?
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
09.08.2013, 17:45     Как сгенерить два массива с неповторяющимися "случайными" точками (X, Y)? #3
Как вариант держать множество точек std::set,генерировать точку примерно так point():x=rand(),y=rand(){};
И проверять есть ли созданная точка в множестве.А потом,если нужно будет,с множества можно и в массив перевести.
Maxak
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 47
09.08.2013, 17:55  [ТС]     Как сгенерить два массива с неповторяющимися "случайными" точками (X, Y)? #4
Цитата Сообщение от Tulosba Посмотреть сообщение
Точка с вещественными координатами? Какой диапазон значений? Для чего нужны эти точки в дальнейшем?
Вещественными, Point<double, double>. Диапазон не важен, но так что бы можно было умножить координаты точек и не вылететь за пределы double.
Эти точки будут записываться в файл. Потом считываться и различными способами для каждой точки из одного массива будет искаться кратчайшее расстояние до точек другого массива.
Эти точки будут служить модельными данными.
Я написал свой способ генерации таких точек, но на 100000 точек он у меня висит уже около часа.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.08.2013, 18:15     Как сгенерить два массива с неповторяющимися "случайными" точками (X, Y)? #5
Maxak, я бы наверное разделил диапазон по каждой координате на 1000 частей (равномерно).
Засунул всё это в 2 вектора, перемешал бы их random_shuffle(), а потом прошелся бы двойным циклом для выдачи двумерной точки. Итоговый набор точек будет уникальным, но будет какая-то одна координата повторятся 1000 раз пока не сменится. Если это критично, то нужно будет немного усложнить алгоритм выдачи вместо двух вложенных циклов.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.08.2013, 18:27     Как сгенерить два массива с неповторяющимися "случайными" точками (X, Y)? #6
Цитата Сообщение от Maxak Посмотреть сообщение
Нужно сгенерировать два массива с уникальными случайными (можно псевдослучайными, это не важно) точками. C количеством точек порядка ~1000000.
Как это лучше сделать?
я хочу заметить, что тут нужно уточнить ещё и вопрос, что такое "уникальные точки"?
вот
точка {0.0 , 0.0}
и
точка {1e-38 , 1e-38}
это одинаковые координаты точек или нет?
Вроде разные, а расстояние между ними будет 0
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.08.2013, 18:32     Как сгенерить два массива с неповторяющимися "случайными" точками (X, Y)? #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
это одинаковые координаты точек или нет?
Я думаю, если p1.x == p2.x && p1.y == p2.y, то точки одинаковые. Иначе можно всё слишком усложнить.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2013, 18:53     Как сгенерить два массива с неповторяющимися "случайными" точками (X, Y)?
Еще ссылки по теме:

Как доказать, что при "а = b" на место "а" возвращается ссылка? C++
C++ Переписать элементы массива "X" в массив "Y" и подсчитать их количество
C++ Два класса: "Студент" и "Курс"

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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.08.2013, 18:53     Как сгенерить два массива с неповторяющимися "случайными" точками (X, Y)? #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;
}
Yandex
Объявления
09.08.2013, 18:53     Как сгенерить два массива с неповторяющимися "случайными" точками (X, Y)?
Ответ Создать тему
Опции темы

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