С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
2 / 2 / 1
Регистрация: 27.05.2015
Сообщений: 78

Нарисовать рекурсивный узор с картинки

18.06.2015, 20:38. Показов 4368. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста нарисовать через рекурсию этот узор:
Название: Рекурсия.jpg
Просмотров: 136

Размер: 10.0 Кб
Желательно на C++ Builder

Очень буду благодарен

(Кому не трудно )
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.06.2015, 20:38
Ответы с готовыми решениями:

Начертить узор, повторяющий узор, узор образован 20 вложенными квадратами
Начертить узор, повторяющий узор, узор образован 20 вложенными квадратами. Стороны первого квадрата параллельны осям координат экрана и...

Начертить узор, повторяющий узор, узор образован 20 вложенными квадратами
Начертить узор, повторяющий узор, узор образован 20 вложенными квадратами. Стороны первого квадрата параллельны осям координат экрана и...

Нарисовать узор
Здравствуйте! Уважаемые программисты, помогите пожалуйста. Нужно в PaintBox нарисовать узор. 2 SpinEdit. В первом уменьшается-увеличивается...

12
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
19.06.2015, 11:44
А формула где ?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
19.06.2015, 12:06
Почтальон, по формуле каждый дурак сможет.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
19.06.2015, 12:24
Я не сомневаюсь, А тут как, на глазок ?

Добавлено через 48 секунд
есть же всякие генераторы узоров видимо нужно как-то их использовать, для расчета формулы
0
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
20.06.2015, 16:36
Я не представляю зачем тут рекурсия. Возможно, потому что не умею рисовать фракталы. Решил сделать в лоб, то есть сначала нарисовать кружки, а потом зигзаговые плавные кривые (в виде S). По моему расчёту нужна функция, которая принимает координаты двух точек и рисует между этими точками кривую в виде быквы S. Пока нарисовал кружки:
Миниатюры
Нарисовать рекурсивный узор с картинки  
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
23.06.2015, 15:58
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я не представляю зачем тут рекурсия.
На рисунке изображено двадцать четыре окружности. И нарисованы они по замкнутой спирали. Просто двенадцать из них разорваны. То есть функция, рисующая одну окружность, вызвана двадцать четыре раза. Рекурсивный вызов здесь, как я думаю, служит для передачи текущих параметров, то есть точки, в которой мы закончили, в очередной вызов функции.

Убил кучу времени, нарисовал кучу цветочков, но формулу так и не подобрал.
2
23.06.2015, 16:01

Не по теме:

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Убил кучу времени, нарисовал кучу цветочков, но формулу так и не подобрал.
Вот и я про то, нужно хоть какое-то первоначальное направление, а тут походу нужно очень много курить....

0
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
23.06.2015, 17:47
Кстати, есть идея. Кривые на рисунке представляют из себя кривые в форме быквы S. Я нашёл, что формулой для них - кривая Безье. Не знаю есть ли в билдере эти кривые, а в C# есть:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
        //
        // Summary:
        //     Draws a Bézier spline defined by four System.Drawing.Point structures.
        //
        // Parameters:
        //   pen:
        //     System.Drawing.Pen structure that determines the color, width, and style
        //     of the curve.
        //
        //   pt1:
        //     System.Drawing.Point structure that represents the starting point of the
        //     curve.
        //
        //   pt2:
        //     System.Drawing.Point structure that represents the first control point for
        //     the curve.
        //
        //   pt3:
        //     System.Drawing.Point structure that represents the second control point for
        //     the curve.
        //
        //   pt4:
        //     System.Drawing.Point structure that represents the ending point of the curve.
        //
        // Exceptions:
        //   System.ArgumentNullException:
        //     pen is null.
        public void DrawBezier(Pen pen, Point pt1, Point pt2, Point pt3, Point pt4);


Если бы попробовать из двух кривых Безье создать S кривую, а то с одной получается так:
Миниатюры
Нарисовать рекурсивный узор с картинки  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
23.06.2015, 17:54
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Не знаю есть ли в билдере эти кривые
Они в WinAPI есть: PolyBezier
1
2 / 2 / 1
Регистрация: 27.05.2015
Сообщений: 78
24.06.2015, 00:36  [ТС]
Извиняюсь что так долго не писал.
Вот код. Только он на паскале и перевести на C++ не получилось



0
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
24.06.2015, 01:55
Как я понял, рекурсия для решения применяется, как замена циклу.

Цитата Сообщение от 8Observer8 Посмотреть сообщение
Если бы попробовать из двух кривых Безье создать S кривую, а то с одной получается так
Поправлю себя. Нет необходимости соединять две кривых Безье, чтобы увеличить гибкость, так как можно использовать WinAPI функцию, в которую передаётся массив из точек, как можно увидеть по ссылке, что приводили выше. Кривую тогда можно будет изгибать под нужную форму:
Миниатюры
Нарисовать рекурсивный узор с картинки  
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
24.06.2015, 11:21
Lolka1996, нет уж дудки.

На самом деле я понял как можно нарисовать данную фигуру. Никакие Безье тут не нужны. Это график эпициклоиды.

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double w = Image1->Width/2.;
double h = Image1->Height/2.;
 
const double R1 = 190.0;  // По которой катится
const double R2 = R1/6.; // Которая катится
const double R3 = R2*2.; // Где находится точка относительно R2
 
for( double i=0; i<R1/2; i+=0.01 )
    {
    double x = (R1 + R2) * cos( R2 * i / R1 ) - R3 * cos( (R1 + R2) / R1 * i );
    double y = (R1 + R2) * sin( R2 * i / R1 ) - R3 * sin( (R1 + R2) / R1 * i );
 
    //Image1->Canvas->LineTo( y + w, x + h );
    Image1->Canvas->Pixels[x + w][y + h] = clBlack;
    }
Название: ScreenShot.JPG
Просмотров: 92

Размер: 9.0 Кб

Но только эпициклойды со скольжением.

Остался вопрос как сделать скольжение. То есть вращение заданной точки в обратную сторону движения катящейся окружности.
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
26.06.2015, 08:25
Так, значит. Зачем тут рекурсия я придумал. Осталось только подобрать коэффициенты (w и R). Ну и глубину рекурсии соответственно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <math>
TPoint Circle( POINT &pt, double &t, int count )
{
double w( 0 ), R( 0 );
switch( count )
  {
  case 0 : w = 1.0;   R = 120; break;
  case 1 : w = 20.0;  R = 60;  break;
  case 2 : w = 110.0; R = 15;  break;
  case 3 : w = 1.0;   R = 100; break;
  }
 
pt.x = R * cos( w * t ) + pt.x;
pt.y = R * sin( w * t ) + pt.y;
 
if( count >= 2 )
  return pt;
else
  Circle( pt, t, ++count );
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormActivate(TObject *Sender)
{
int w = Image1->Width/2;
int h = Image1->Height/2;
 
  for( double t=0; t<5; t+=0.01 )
    {
    TPoint pt( 0, 0 );
    Circle( pt, t, 0 );
    //Image1->Canvas->Pixels[pt.x + w][pt.y + h] = clBlack;
    Image1->Canvas->LineTo( pt.x + w, pt.y + h );
    }
}
//---------------------------------------------------------------------------
Развлекайтесь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.06.2015, 08:25
Помогаю со студенческими работами здесь

Нарисовать узор
Написать программу, которая выводит на экран приведенный ниже узор

Нарисовать узор на Canvas
Доброго времени всем, нужна помощь в рисовании в Canvas. Нужно нарисовать узор, вложенный ниже. Я пробовал, не могу подобрать координаты,...

Нарисовать узор из колец
Нарисуйте пожалуйста рисунок

Нарисовать узор в Delphi

Нарисовать узор из зигзагов
Не понимаю , как составить процедуру , помогите , пожалуйста :с


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru