|
29 / 22 / 8
Регистрация: 10.05.2013
Сообщений: 236
|
||||||
При большом значении переменной цикла программа зависает17.09.2020, 10:27. Показов 4223. Ответов 30
Метки нет (Все метки)
Если треугольник заменить на шестиугольник, то уже при 200 000 зависает. Время работы программы должно быть пропорциональным количеству итераций, и что 1 млн будет выполняться больше 100к в 10 раз, понимаю. Но при 100к время вывода измеряется в секундах, то для 1 млн ждал больше часа и ничего не получил. Мощности ПК достаточно (i3 8100, ОЗУ 16Gb) Как верхний левый угол окна совместить с соответствующим углом монитора?
0
|
||||||
| 17.09.2020, 10:27 | |
|
Ответы с готовыми решениями:
30
Макрос выдает ошибку при большом значении
|
|
|
|
| 23.09.2020, 12:36 | |
|
Непонятно, что хотите сделать.
Сначала я заметил, что индексы хорошие, можно использовать numpy. Потом я заметил, что у вас получается всего три фиксированых значения. Зачем гонять их миллион раз? Непонятно, что такое point, вероятно, затык в нём.
0
|
|
|
29 / 22 / 8
Регистрация: 10.05.2013
Сообщений: 236
|
|
| 05.10.2020, 13:49 [ТС] | |
|
Программа рисует фрактал (см. вложенный файл).
Задано три вершины треугольника [0,1000],[950,0],[1900,1000] и еще одна 4-тая точка [950,1000]. Следующая точка будет построена посредине между 4-той точкой и случайно выбранной одной из вершин треугольника. Новою построенную точку назовем 4-той и продолжаем читать текст с предыдущего предложения. point - функция из библиотеки Graph: point(x, y) point(x, y, color) нарисовать точку цвета c с координатами (x,y); если цвет не задан, используется текущий цвет линии, установленный ранее с помощью команды penColor; функция возвращает ссылку на объект-точку.
0
|
|
|
29 / 22 / 8
Регистрация: 10.05.2013
Сообщений: 236
|
|
| 05.10.2020, 15:54 [ТС] | |
|
Нет там рекурсии, только цикл.
Есть три фиксированных точки (А,Б,С - вершины) и одна бегающая точка (Д). На первой итерации выбирается случайным образом одна из вершин (например выбралась вершина С). Ищем средину отрезка ДС и строим точку в средине отрезка. Точке Д присваиваем координаты средины отрезка. На этом первая итерация окончена. На второй итерации выбирается случайным образом одна из вершин (например выбралась вершина А). Ищем средину отрезка ДА и строим точку в средине отрезка. Точке Д присваиваем координаты средины отрезка. На этом вторая итерация окончена. И так 100 000 раз. Результат работы программы в прикрепленном файле выше. Но если увеличивать число итераций до 1 000 000, программа в основном виснет, но иногда и выполняется.
0
|
|
|
29 / 22 / 8
Регистрация: 10.05.2013
Сообщений: 236
|
|
| 06.10.2020, 15:05 [ТС] | |
|
0
|
|
|
29 / 22 / 8
Регистрация: 10.05.2013
Сообщений: 236
|
||||||
| 08.10.2020, 10:29 [ТС] | ||||||
0
|
||||||
|
|
|
| 08.10.2020, 12:11 | |
|
SergeyKorotun, рисование? Ну, рисование вообще операция не быстрая. Зависит от обстоятельств. Anti-aliasing там, свистелки-...
Добавлено через 1 час 11 минут Кроме того, рисование с такой точностью - миллион шагов рекурсии - не имеет смысла. Даже 100 тыс. не имеет. Просто 100 - за глаза хватит.
0
|
|
|
29 / 22 / 8
Регистрация: 10.05.2013
Сообщений: 236
|
||||
| 08.10.2020, 13:32 [ТС] | ||||
|
Если бы пикселей на мониторе было столько, сколько точек на части плоскости, совпадающей с экраном, то все точки имели бы разные координаты и имел бы смысл не только миллион итераций, и и бесконечное число итераций.
0
|
||||
|
|
||||
| 08.10.2020, 14:33 | ||||
И я говорил не о ста точках, а о ста шагах рекурсии.
0
|
||||
|
29 / 22 / 8
Регистрация: 10.05.2013
Сообщений: 236
|
|||
| 08.10.2020, 14:50 [ТС] | |||
|
В цикле при первой итерации вызывается функция point(), которая выполняется от А до Я и возвращает значение. На второй итерации вызывается функция point(), которая выполняется от А до Я и возвращает значение и нигде не использует данные из функции, вызванной при первой итерации. И т.д. Неужели это рекурсивный вызов?
0
|
|||
|
|
||
| 08.10.2020, 15:30 | ||
|
SergeyKorotun, ещё раз: формально можно сказать, что рекурсии нет, поскольку нет функции. По смыслу - программа рисует именно рекурсивный рисунок, это же очевидно по вашей иллюстрации.
Если у вас добавление 1 пикселя - да, но это же просто медленное мучение.Я бы сделал так. На каждой итерации программа рисует три точки + три внутренних треугольника. Сколько точек тут несущественно, а вот тройной вызов рекурсии - да. Допустим, нулевом рисовалась бы одна точка, просто для простоты понимания. На первом шаге - 3, на втором - 9 и т. д. 3**13 уже = полтора миллиона. Для справки: 1920*1080 будет чуть больше двух миллионов. Добавлено через 5 минут И ещё я бы не рисовал точки, а рисовал бы треугольники. Один чёрный треугольник, вершиной вверх. Потом на нём - белые, рекурсивно. 13 шагов - выше крыши.
0
|
||
|
29 / 22 / 8
Регистрация: 10.05.2013
Сообщений: 236
|
|||
| 08.10.2020, 15:33 [ТС] | |||
|
0
|
|||
|
|
|||
| 08.10.2020, 15:59 | |||
Решил нарисовать такое вот. 9 шагов, если что. Рисуется в момент.
0
|
|||
|
29 / 22 / 8
Регистрация: 10.05.2013
Сообщений: 236
|
|
| 08.10.2020, 20:36 [ТС] | |
|
Вы построили треугольник Серпинского итеративным методом.
Запуская поочередно программу, вы будете получать одну и ту же картинку. Это неинтересно. Вы получили тот рисунок, что ожидали от программы. Вы можете показать код программисту, и он, не выполняя программу, скажет что собой будет представлять рисунок. Мне больше нравится данный треугольник, построенный методом хаоса. Уверен, что никто из тех, кто не знал за этот треугольник, не сможет предугадать по коду, что в итоге получится. Логичным будет ответ, что получится более-менее равномерно заполненный точками треугольник. При большом количестве итераций вам будет казаться, что вы получаете идентичные изображения, как вам кажется, что все мухи одинаковые. На самом деле, все рисунки будут разные, вы же видите, что все люди вроде бы одинаковые (две руки, две ноги, голова, ...), но в то же время вы видите, что все они чем то отличаются. Фракталы, построенные методом хаоса, объясняют причину разнообразия мира (люди отличаются друг от друга, деревья все разные, ...). Задан закон построения (в яйцелетке, в семечке, ...), но случайные величины вносят свой вклад в разнообразие. Фракталы, постоенные методом хаоса - это порядок в хаосе. В связи вашим с высоким рейтингом я не могу вам не отвечать. Если можете, помогите понять причину, почему при цикле с количеством итераций ~250 000 и более программа виснет. Еще раз: никаких ни явных, не скрытых рекурсивных вызовов в коде нет, никаких переполнений стека быть не может. Мне совсем не интересен фрактал, полученный вашим кодом в предыдущем сообщении (т.е. люди-клоны неинтересны). Только поточечный.
0
|
|
|
|
|
| 09.10.2020, 08:55 | |
|
SergeyKorotun, я понял.
Рекурсивный по смыслу вызов в коде есть, просто он получается чуть сложнее. Случайно тут происходит только выбор вершины. На больших масштабах с тем же успехом можно их перебирать по порядку. Насчёт хаоса - громко сказано, но почему бы и не доказать, что построеное таким образом можество точек будет не равномерно заполненным треугольником, а вот таким фрактальным. Во-первых, рекомендую перейти на numpy. В данной программе радикального прироста это не даст, но код будет чуть более читаемый. + Перейти на явную рекурсию, тоже для читаемости. Наличие случайности не отменяет самой рекурсии. Если рисовать по одной точке за шаг - то вылетит со stack overflow, но если по три - будет всё ок. Во-вторых и в главных. Наверняка наибольшие потери времени у вас на отрисовке. И наверняка многие точки у вас рисуются по 2 и более раз. Отсюда вывод. Делаете буфер - двумерный массив, булевый, желательно numpy - и во время долгого цикла заполняете его. После цикла пробегаете по массиву и только тогда рисуете точки.
0
|
|
|
29 / 22 / 8
Регистрация: 10.05.2013
Сообщений: 236
|
||||||||||
| 09.10.2020, 10:15 [ТС] | ||||||||||
|
1. Задаются координаты вершин исходного треугольника. 1-це ставим в соответствие первую вершину треугольника, 2 - вторую, 3 - третью. 2. Задаем некоторую произвольную начальная точка с координатами (x4,y4) 3. Генерируем случайное число из множества {1, 2, 3}. 4. Выбираем одну из вершин треугольника, соответствующую полученному случайному числу в пункте 2. 5. Строится точка с новыми координатами: x=(xv+x4)/2 y=(yv+y4)/2, где: xv и yv - координаты выбранной вершины 6. x4=x, y4=y 5. Возврат к началу цикла, т.е. к пункту 3. #viewCoords(1919, 0, 1079, 0) изображение будет выводится поточечно, а не как сейчас: все точки одновременно. Наблюдать можно часами. На паскале когда то писал, работает с любым числом итераций. Но хочется перейти на пайтон.
0
|
||||||||||
|
|
|||||
| 09.10.2020, 10:27 | |||||
Можно, конечно, чуток помозговать над прорисовкой - убрать манипуляцию с цветами, рисовать точку вместо линии - но радикально там ничего не ускорите.
0
|
|||||
| 09.10.2020, 10:27 | |
|
Помогаю со студенческими работами здесь
20
При каком наибольшем натуральном значении переменной x программа выведет сначала 28, а потом 17? Определите, при каком наименьшем выведенном значении переменной S программа выведет число 32 При каком наименьшем и наибольшем введённом значении переменной s программа выведет число 542 Определите, при каком наименьшем введённом значении переменной s программа выведет число 1024
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|