274 / 200 / 33
Регистрация: 18.04.2009
Сообщений: 177
1

Генерация случайных в пределах окружности.

04.05.2009, 09:37. Показов 10357. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как сгенерировать двадцать чисел (можно повторяющихся) в пределах окружности радиуса 10.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2009, 09:37
Ответы с готовыми решениями:

Генератор случайных чисел в пределах [-1;1]
Здравствуйте. Подскажите плиз как мне загнать в массив случайные значения распределенные на...

Генерация случайных последовательностей
Доброго времени! Возникла интересная проблема. На каждой итерации цикла вызываю функцию, которая ...

Генерация случайных чисел
В общем нужен достаточно большой массив (скажем 8000 типа byte) случайных бит, причем нужна...

Генерация случайных int чисел
Random rnd = new Random(); rnd.Next(10); label7.Text = rnd; Пишет:...

10
1512 / 779 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
04.05.2009, 10:16 2
Вот так
C#
1
2
3
4
5
 Random rd = new Random(10);
            for (int i = 0; i < 20; i++)
            {
                int jr = rd.Next(20) - 10;              
            }
Добавлено через 56 секунд
Это если нужны целые числа.
Если нужны вещественные то подругому.

Добавлено через 1 минуту 38 секунд
Объясните что значит в пределах окружности.
0
274 / 200 / 33
Регистрация: 18.04.2009
Сообщений: 177
04.05.2009, 11:45  [ТС] 3
В пределах окружности значит: есть точка (0, 0)-это центр окружности, надо генерировать числа в пределах радиуса = 10 этой окружности. Если написать:

C#
1
2
3
4
5
6
7
8
9
10
11
Graphics g = Graphics.FromImage(pictureBox1.Image);
 
for (int i = 0; i < 20; i++)
{                                      
       int rnd1 = rnd.Next(-10, 10);
       int rnd2 = rnd.Next(-10, 10);
 
       g.FillRectangle(new SolidBrush(currentColor), e.X + rnd1, e.Y + rnd2, 1 * k, 1 * k);
}
 
g.Dispose();
то точки генерируются в пределах квадрата, а нужно в пределах окружности, т.е. круга.
0
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
04.05.2009, 16:50 4
Простейший способ который я здесь вижу, это генерация точек в приделах квадрата, как вы и делали, только перед отображением их проверять на принадлежность кругу.
If(Math.sqrt((double)rnd1)+ Math.sqrt((double)rnd2)<= Math.sqrt((double)R))
{
//отобразить точку, и счетчик точек++
}
Это далеко не самый рациональный способ поскольку,циклов генерации случайных чисел будет больше 20. Чтобы сделать луче надо вспомнить формулу уравнения круга и точки на нем,или точка описыв круг, чето есть такое но не могу найти (
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
05.05.2009, 07:56 5
Использовать полярную систему координат. Генерировать радиус от 0 до 10 и угол поворота 0 до 360 градусов и переводит в декартову систему.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
05.05.2009, 11:44 6
Цитата Сообщение от Green Посмотреть сообщение
Использовать полярную систему координат. Генерировать радиус от 0 до 10 и угол поворота 0 до 360 градусов и переводит в декартову систему.
В своё время кто-то из знакомых пробовал этот способ. Получается несколько неравномерно. Грубо говоря, если ограничимся целыми числами радиуса от 0 до 10 и целыми значениями угла в градусах и все комбинации отобразим на кргу, то ближе к центру точки будут натыкани более плотно, чем на периферии. Поэтому для равномерного распределения всё-таки более правильно генерить точку внутри квадрата и проверять на попадание в окружность
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
06.05.2009, 05:32 7
Evg, опровергать не буду, но все относительно. Все зависит задачи. Радиус не большой, кол-во генераций неизвестно. Характер распределения не задан. Возможно, равномерное распределение по сечениям окружности более важно, чем равномерная плотность по всей площади.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
06.05.2009, 12:57 8
Цитата Сообщение от Green Посмотреть сообщение
Evg, опровергать не буду, но все относительно. Все зависит задачи. Радиус не большой, кол-во генераций неизвестно. Характер распределения не задан. Возможно, равномерное распределение по сечениям окружности более важно, чем равномерная плотность по всей площади.
Я не к тому, что ты сказал плохой вариант, а к сведению. Кому-то может оказаться полезным
0
274 / 200 / 33
Регистрация: 18.04.2009
Сообщений: 177
07.05.2009, 01:16  [ТС] 9
Всё, разобрались. Вот как это делается:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
                Random rnd = new Random();
 
                for (int i = 0; i < 30; i++)
                {
                    int rnd2 = rnd.Next(-10, 10);
                    int rnd3 = rnd.Next(-10, 10);
 
 
                    if ((rnd2 * rnd2) + (rnd3 * rnd3) <= 100)
                    {
                        g.FillRectangle(new SolidBrush(currentColor), e.X + rnd2, e.Y + rnd3, 1, 1);
                    }
                }
2
Green
07.05.2009, 06:12
  #10

Не по теме:

Цитата Сообщение от Evg Посмотреть сообщение
а к сведению.
Я так и понял. Просто, хотел немного расширить границы проблемы.

0
0 / 0 / 0
Регистрация: 02.11.2017
Сообщений: 1
08.06.2010, 15:45 11
Скиньте пожалуйста весь программный код генератора временной последовательности по распределению Фишера, код на с++ !!! Очень срочно нужен!!!

Добавлено через 1 минуту
Стасёнок, Скиньте пожалуйста весь программный код генератора временной последовательности по распределению Фишера, код на с++ !!! Очень срочно нужен!!!
0
08.06.2010, 15:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2010, 15:45
Помогаю со студенческими работами здесь

Генерация случайных значений по маске
Требуется реализовать генерацию случайных значений по маске. Например A - большая буква, a -...

Генерация случайных неповторяющихся значений
Хочу заставить рандом, что если есть повторяющиеся элементы, то он бы заново рандомил массив, до...

Генерация случайных чисел в интервале от 1 до 50
Написать программу которая генерирует 10 случайных чисел в интервале от 1 до 50. Вывести их на...

Генерация уникальных случайных чисел
Здравствуйте. Есть следующий код: class Employee { public int Id { get; set; } ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru