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

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

18.06.2015, 20:38. Показов 4370. Ответов 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
33371 / 21497 / 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 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 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru