|
29 / 22 / 8
Регистрация: 10.05.2013
Сообщений: 236
|
||||||
При большом значении переменной цикла программа зависает17.09.2020, 10:27. Показов 4110. Ответов 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): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|