Как нарисовать 40 соприкасающихся окружностей?08.02.2021, 19:33. Показов 6399. Ответов 8
Метки нет (Все метки)
Задача следующая: Три окружности равного радиуса ( = 1) попарно соприкасающихся друг с другом образуя таким образом некую область похожую на равносторонний треугольник стороны которого есть дуги вышеупомянутых окружностей.
Условие задачи (продолжение) Итак, надо между тремя окружностями вписать ещё одну, которая будет касаться всех трёх. Это возможно. Кому интересно - пусть посмотрит в интернете: "теорема Декарта (геометрия)", есть и другое название этой теоремы - теорема Содди или теорема о соприкасающихся окружностях. А так же нужна ещё одна формула из "Комплексной теоремы Декарта". А дальше всё просто. Нарисовав одну окружность "между тремя" - мы будем иметь возможность нарисовать ещё 3 окружности. Потом ещё 9 и ещё 27. Итого 40 соприкасающихся между собой окружностей. Решение (алгоритм) 1. процедура Index() устанавливает (ещё до рисования окружностей) какие три окружности образуют тройку, где они попарно соприкасаются. Тут на форуме была моя тема о заполнении матрицы по сложному алгоритму. Этот алгоритм был слегка модифицирован и использован в этой задаче. Надо отметить, что каждая окружность имеет свой номер (индекс) - отсюда и название процедуры. Индексы троек хранятся в массиве (матрице) M(). 2. процедура Krumm() определяет кривизну всех окружностей и заносит данные в массив k() 3. процедура Qwrz() извлекает квадратный корень из комплексного числа. Эта совершенно новая процедура - новый алгоритм. Конечно можно было использовать и старый алгорим, который я предложил в своей теме о комплексных числах. Но решая данную задачу, я наткнулся на то, что программа рисует окружности где-то в стороне. Я подумал, что виноват алгоритм вычисления квадратного корня. Нет его вины. Это я неправильно установил систему координат. Но алгорим уже был заменён и я не стал его отменять. 4. процедура Komplex() вычисляет сложное арифметическое выражение состоящее из множества операций как вещественных, так и комплексных чисел. Вот оно: z4 = (k1 * z1 + k2 * z2 + k3 * z3 + 2 * SQR(k1 * k2 * z1 * z2 + k2 * k3 * z2 * z3 + k3 * k1 * z3 * z1)) / k4. Все данные заносятся в массив (матрицу) z(). Можете себе представить, что 33 строки этой процедуры подарили мне голубизну неба, прозрачность воздуха и блеск солнечных лучей. Ага. Столько счастья и всё мне одному? Вот решил с вами поделиться. Скорого ответа не жду. Я тут 10 дней решал - вря ли кто-нибудь быстро (без бутылки) разберёт.
0
|
||||||
| 08.02.2021, 19:33 | |
|
Ответы с готовыми решениями:
8
Вывести изображение "5 соприкасающихся окружностей вписаны в большую окружность" Модуль Graph. Нарисовать домик. Нарисовать узор из окружностей |
|
|
|
| 08.02.2021, 20:18 | |
Сообщение было отмечено wer1 как решение
Решение
2
|
|
| 08.02.2021, 20:26 [ТС] | |
|
Pro_grammer,
спасибо! Я так понимаю, что есть программа которая может нарисовать "бесконечное" количество соприкасающихся окружностей? То есть, есть и первооткрыватели этой задачи? И перворешатели?
0
|
|
|
|
||
| 08.02.2021, 20:57 | ||
|
1
|
||
| 09.02.2021, 07:55 [ТС] | |
|
Pro_grammer,
спасибо! Вы понимаете, эта программа может рисовать и другие наборы окружностей. Достаточно заменить три самые большие окружности на три любые соприкасающиеся окружности. То есть внести в программу изменения начальных данных. Это строки 22 и 25-27. Кроме того, окружностей может быть гораздо больше. С самого начала я предполагал, что программа будет рисовать не 40, а 121 окружность. Но подсчитав их радиус... понял: это почти точки, а не окружности - и я отказался увеличивать их число. А ведь всё просто - небольшие изменения в программу - и готово. Фракталы? - Да конечно, это интересно с точки зрения алгоритма...
0
|
|
|
COM‐пропагандист
|
||
| 09.02.2021, 18:32 | ||
|
Картинку можно будет взять хоть миллион на миллион пикселей — получится фрактал не из 121 окружностей, а ил 121 тысяч окружностей.
1
|
||
| 09.02.2021, 19:57 [ТС] | |
|
Замабувараев,
спасибо! Но вы понимаете, размер экрана бейсика 640 × 480 ... То есть много не нарисуешь. Да понял я вас, понял! Данные можно вывести в файл. Но вы хоть знаете как устроен bmp-файл? Это та ещё задача перевести вычисленные координаты в данные bmp-файла. Просто так не нарисуешь. VB6 предоставляет для графики гораздо больше возможностей!
0
|
|
|
Кормпилятор
|
||
| 11.02.2021, 00:18 | ||
|
Тут дело в другом писать в него будет крайне медленно, особенно если большой файл завести. В памяти DOS много тоже не завести, под виндой - да другое дело.
1
|
||
|
Наивное Существо
|
|
| 20.02.2021, 17:59 | |
|
locm, у меня только 2 гб установлено.
Но если вспомнить ,ч то мы совсем недавно перемещались на волах, а счас космические просторы бороздят корабли.... то это всё ерунда. Главное, у человека wer1 есть мечта.... Добавлено через 3 минуты wer1, Вы не правы "... вря ли кто-нибудь быстро (без бутылки) разберёт..." . Запросто! А вот собрать...... Эххххх.
0
|
|
| 20.02.2021, 17:59 | |
|
Помогаю со студенческими работами здесь
9
Как нарисовать на экране заданное количество окружностей и окружности не должны пересекаться? Нарисовать N окружностей Нарисовать 30 окружностей Нарисовать n окружностей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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(), которая. . .
|