1
1

Здравствуйте, нужно программа под такую задачу. К примеру есть прямая, разделённая на 1000 клеточек "частей" (то есть 1000 точек на ней можно расположить). На этой прямой, нужно расположить к примеру 50 рандомных точек. Так же если на каком-то шаге рандома, выпадает повторное место под точку (тобиш если занята точка 480, и рандом опять в неё попадает, должна быть перевыбрана точка). Есть ли такие визуализаторы? Может web-версии или декстоп программы?

задан 23 Авг '21 14:44

изменен 24 Авг '21 2:40

%D0%9A%D0%B0%D0%B7%D0%B2%D0%B5%D1%80%D1%82%D0%B5%D0%BD%D0%BE%D1%87%D0%BA%D0%B0's gravatar image


9.4k686

2

Для такой специфической задачи вряд ли существуют программы в интернете. Однако такую программу очень легко написать вручную.

(23 Авг '21 16:33) haosfortum

@haosfortum, на каком языке Вы бы её написали и почему?

(24 Авг '21 2:38) Казвертеночка
1

@Казвертеночка: программа простая -- её можно на любом языке написать. Я бы выбрал Pascal, потому что к нему лучше всего привык. Но годится и любой другой.

(24 Авг '21 9:21) falcao
1

@Казвертеночка, на питоне, потому что я неплохо его знаю, и в частности знаю, как подключить визуал.

(24 Авг '21 9:26) haosfortum
10|600 символов нужно символов осталось
2

Конечно такую программу можно написать на любом языке, как универсального назначения, так и в любом матпакете. Ниже прога в Maple. Она написана как процедура, то есть пользователь сам выбирает число клеточек N и число случайных точек n . Прога возвращает список этих случайных точек и анимацию их появления. В примере взяты значения N=20 и n=7 .

alt text

alt text

ссылка

отвечен 24 Авг '21 11:21

Не могли бы вы в кратце рассказать, как в Maple написать эту процедуру. У меня постоянно различные ошибки выдаёт сам Maple

(2 Сен '21 19:03) Nelegal
1

@Nelegal Очень трудно отвечать на такие неконкретные вопросы. Понятен ли Вам общий смысл написанного? Есть ли у Вас чёткое понимание что такое процедура, как она работает, как работают кратные циклы и т.д и т.п.

(2 Сен '21 21:12) Юрий Николаевич

Мне понятен общий смысл. Я попробовал перенести код, чтобы создать эту визуализацию в maple, но этот мат.инструмент ругается - цитирую ошибку, которую он выдаёт: Warning, (in P) m is implicitly declared local Warning, (in P) m is implicitly declared local Error, (in P) range bounds in seq must numeric or character Возможно я что-то не так переписываю, можете сюда код в текстовом виде скинуть? Либо ссылку, откуда скопировать его можно будет

(2 Сен '21 21:50) Nelegal
1

Ниже скопированный текст кода:

restart; P:=proc(N,n) local r,k,S,i,j,a,b,L,L1; uses plots,plottools; randomize(); r:=rand(0...convert(N,float)); k:=0;S:={}; for i from 1 to n do for j from 1 do a:=r(); b:=ceil(a); if not (b in S) then k:=k+1; L[k]:=a; S:=S union {b}; break fi; od; od; L:=convert(L,list); L1:=map(t->[t,0], L); print(L); display([plot([[0,0]]),seq(display(seq(disk(L1[m],0.005N,color=red),m=1..i),scaling=constrained)$7, i=1..n)],insequence=true,view=[0..N,-0.005N..0.005*N], size=[1000,200],tickmarks=[N+1,0]); end proc:

(2 Сен '21 22:48) Юрий Николаевич
1

Я заметил, что на этом сайте тексты кодов часто воспроизводятся некоректно. Например в коде выше в двух местах пропущен знак умножения (между 0.005 и N)

(2 Сен '21 23:03) Юрий Николаевич

Скопировал ваш код, всё так же ругается на "Warning, (in P) m is implicitly declared local" - "Предупреждение, (в P) m неявно объявлено локальным". К сожалению не понимаю что он хочет, впервые пользуюсь этой программой.

(3 Сен '21 0:13) Nelegal
1

Warning это предупреждение, а не ошибка (в моей версии Maple 2018 нет этого предупреждения). Просто добавьте m в список local. Вы не написали работает ли процедура на конкретных примерах.

(3 Сен '21 0:37) Юрий Николаевич

Добавил "m" в список local. Предупреждения больше нету. По поводу работы процедуры, как запустить её в режиме визуализации? Впервые работаю в этой программе, не понимаю как это сделать, извините

(3 Сен '21 11:10) Nelegal

Например, запускаете этот пример P(20,7) . Появляется список из 7 случайных точек и числовая ось от 0 до 20 пока без этих случайных точек. Щёлкаете по ней и появляется панель анимации, на которой нажимаете кнопку "play"

(3 Сен '21 12:36) Юрий Николаевич

Получилось, спасибо. А теперь вопрос, какой параметр изменить, чтобы рандом был только по целым числам. И чтобы бы сразу на прямую переносились точки, без временного промежутка. И как можно запустить процедуру с параметрами к примеру (10000,500)? Возможно ли в maple такое

(3 Сен '21 15:19) Nelegal

@Nelegal: если числа большие, то после применения масштабирования получается, что целочисленность ни на что не влияет.

Запустить, наверное, можно, хотя я сам не пробовал. Maple я очень часто использую для своих нужд, но у меня старая версия, и это всё не работает. Там важно, чтобы разные точки не попадали на одни и те же места после округлений.

(3 Сен '21 19:19) falcao
показано 5 из 11 показать еще 6
10|600 символов нужно символов осталось
1

randomize(): nn:=10^4: k:=500: mn:={0,nn}: for i from 1 to k do m1:={$0..nn} minus mn: r:=nops(m1): j:=rand(r)()+1: mn:=mn union {m1[j]} od: sort([op(mn)]);

В качестве добавления к ответу @Юрий Николаевич предъявляю простенькую программу, написанную в старой версии Maple за пару минут. Там в цикле формируется случайное множество, где в самом начале взяты только концы отрезка, а на каждом шаге берётся с равной вероятностью любая точка из ещё не взятых. Это даёт случайный набор из примерно k точек (на самом деле, k+2, считая концы) на отрезке длиной nn.

Вот пример того, что было выдано (практически мгновенно) после одного из запусков:

[0, 42, 66, 94, 117, 140, 154, 157, 168, 174, 262, 268, 276, 277, 283, 286, 293, 301, 321, 340, 354, 383, 394, 402, 409, 424, 444, 457, 471, 481, 491, 516, 517, 596, 639, 668, 688, 697, 702, 743, 793, 797, 807, 831, 833, 881, 890, 893, 896, 905, 933, 953, 963, 1004, 1018, 1023, 1031, 1063, 1080, 1105, 1119, 1135, 1187, 1195, 1214, 1216, 1219, 1225, 1226, 1237, 1239, 1249, 1266, 1301, 1314, 1326, 1338, 1353, 1388, 1408, 1419, 1432, 1467, 1470, 1475, 1478, 1510, 1532, 1586, 1591, 1597, 1666, 1667, 1709, 1710, 1725, 1731, 1741, 1750, 1762, 1778, 1807, 1829, 1870, 1888, 1937, 1953, 1974, 2041, 2049, 2052, 2055, 2063, 2074, 2087, 2112, 2150, 2151, 2221, 2271, 2273, 2283, 2327, 2364, 2390, 2428, 2437, 2446, 2479, 2482, 2498, 2522, 2581, 2584, 2594, 2613, 2617, 2622, 2704, 2707, 2712, 2718, 2762, 2792, 2803, 2885, 2898, 2913, 2935, 2966, 2980, 3010, 3013, 3084, 3087, 3119, 3131, 3163, 3167, 3208, 3241, 3247, 3322, 3362, 3376, 3407, 3420, 3456, 3472, 3495, 3507, 3508, 3580, 3594, 3624, 3660, 3673, 3691, 3730, 3741, 3762, 3770, 3775, 3798, 3803, 3819, 3821, 3823, 3825, 3882, 3889, 3907, 3910, 3921, 3923, 3938, 3946, 3973, 3998, 4042, 4049, 4080, 4155, 4174, 4191, 4200, 4261, 4285, 4303, 4332, 4364, 4399, 4445, 4477, 4483, 4489, 4551, 4564, 4568, 4577, 4601, 4614, 4622, 4651, 4652, 4655, 4709, 4724, 4730, 4751, 4816, 4817, 4819, 4840, 4847, 4848, 4866, 4889, 4931, 4938, 4983, 4993, 5002, 5028, 5035, 5042, 5051, 5075, 5078, 5088, 5093, 5116, 5123, 5133, 5181, 5190, 5191, 5193, 5199, 5239, 5248, 5249, 5313, 5319, 5335, 5337, 5381, 5414, 5421, 5425, 5431, 5433, 5434, 5476, 5480, 5508, 5521, 5537, 5542, 5564, 5565, 5590, 5605, 5616, 5650, 5654, 5664, 5703, 5704, 5716, 5718, 5732, 5741, 5792, 5811, 5812, 5821, 5908, 5959, 5969, 6004, 6022, 6089, 6103, 6123, 6136, 6142, 6145, 6167, 6185, 6224, 6280, 6287, 6288, 6294, 6312, 6324, 6329, 6377, 6383, 6388, 6444, 6447, 6458, 6460, 6486, 6490, 6538, 6543, 6544, 6545, 6594, 6639, 6667, 6683, 6710, 6737, 6750, 6804, 6809, 6817, 6836, 6839, 6846, 6894, 6903, 6924, 6940, 7006, 7023, 7027, 7030, 7033, 7052, 7056, 7079, 7191, 7217, 7218, 7229, 7246, 7252, 7273, 7291, 7306, 7312, 7341, 7346, 7350, 7362, 7388, 7415, 7423, 7446, 7467, 7498, 7547, 7549, 7558, 7577, 7585, 7643, 7646, 7672, 7696, 7707, 7720, 7767, 7777, 7784, 7844, 7864, 7920, 7928, 7952, 7960, 7966, 7971, 7984, 7990, 8004, 8024, 8045, 8074, 8088, 8089, 8109, 8146, 8187, 8219, 8238, 8244, 8252, 8275, 8297, 8308, 8346, 8367, 8368, 8393, 8396, 8418, 8423, 8439, 8450, 8452, 8471, 8518, 8520, 8531, 8547, 8557, 8568, 8604, 8606, 8610, 8636, 8644, 8646, 8658, 8725, 8756, 8769, 8777, 8795, 8829, 8849, 8904, 8907, 8940, 8943, 8950, 8963, 8965, 8974, 8979, 9018, 9035, 9036, 9044, 9069, 9108, 9109, 9115, 9125, 9188, 9193, 9195, 9197, 9209, 9211, 9213, 9248, 9252, 9299, 9305, 9332, 9352, 9390, 9425, 9432, 9492, 9493, 9494, 9496, 9518, 9540, 9557, 9594, 9648, 9692, 9708, 9748, 9750, 9764, 9819, 9927, 9940, 9961, 9971, 9994, 10000]

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

ссылка

отвечен 3 Сен '21 19:33

Тоже интересно, но возвращаясь к коду @Юрий Николаевич всё таки хочется узнать, как можно запустить к примеру на прямой в 1кк точек, 10к рандомных точек. На моём неплохом железе, maple генерирует только точки, а визуализацию уже видимо не вытягивает вывести к сожалению

(3 Сен '21 23:46) Nelegal
10|600 символов нужно символов осталось
0

Можно написать на VB.Net

ссылка

отвечен 24 Авг '21 9:20

10|600 символов нужно символов осталось
Ваш ответ

Если вы не нашли ответ, задайте вопрос.

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

Математика - это совместно редактируемый форум вопросов и ответов для начинающих и опытных математиков, с особенным акцентом на компьютерные науки.

Присоединяйтесь!

отмечен:

×4,436
×4,393
×69
×3

задан
23 Авг '21 14:44

показан
721 раз

обновлен
3 Сен '21 23:46

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

Дизайн сайта/логотип © «Сеть Знаний». Контент распространяется под лицензией cc by-sa 3.0 с обязательным указанием авторства.
Рейтинг@Mail.ru