|
29 / 22 / 8
Регистрация: 10.05.2013
Сообщений: 236
|
||||||
При большом значении переменной цикла программа зависает17.09.2020, 10:27. Показов 4144. Ответов 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
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|