Как нарисовать 40 соприкасающихся окружностей?08.02.2021, 19:33. Показов 6414. Ответов 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 окружностей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера 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. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|