Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/65: Рейтинг темы: голосов - 65, средняя оценка - 4.75
2 / 2 / 0
Регистрация: 02.06.2012
Сообщений: 60

Рисование фрактала на форме

18.03.2013, 21:45. Показов 13944. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дали задание нарисовать фрактал у виде папоротника. Вот собственно сам скрин фрактала который должен получится:
Название: фрактал.JPG
Просмотров: 1155

Размер: 6.4 Кб
Короче говоря не рисуется оно как надо, смотрел примеры в инете, подобного на С# не нашел

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Lab_2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }    
        
        public void Frac(Graphics e, float x1, float y1, float x2, float y2,int num)
        {
            float lmin = 1;
            float k = 0.14F;
            float kl=0.3F;
            float a = 2;
            float b = 86;                           
           
            float x3=x2, y3=y2, x4=x3, y4=y3, x5=x4, y5=y4, x6=x5, y6=x5, x7=x5, y7=y5;
            int num1=num + 1;
 
            if ((x1*x1-2*x1*x2+x2*x2)+(y1*y1-2*y1*y2+y2*y2)>lmin)
            {               
                float хЗ = (x2 - x1) * (float)Math.Cos(a) - (y2 - y1) * (float)Math.Sin(a) + x1;
                float уЗ = (x2 - x1) * (float)Math.Sin(a) + (y2 - y1) * (float)Math.Cos(a) + y1;
 
                float х4 = x1 * (1 - k) + x3 * k;
                float у4 = y1 * (1 - k) + y3 * k;
 
                x5 = x4 * (1 - kl) + x3 * kl;
                y5 = y4 * (1 - kl) + y3 * kl;
 
                float х6 = (x5 - x4) * (float)Math.Cos(b) - (y5 - y4) * (float)Math.Sin(a) + x4;
                float у6 = (x5 - x4) * (float)Math.Sin(b) + (y5 - y4) * (float)Math.Cos(a) + y4;
 
                float х7 = (x5 - x4) * (float)Math.Cos(b) - (y5 - y4) * (float)Math.Sin(a) + x4;
                float у7 = -(x5 - x4) * (float)Math.Sin(b) + (y5 - y4) * (float)Math.Cos(a) + y4;
                
                    Pen p1 = new Pen(Color.DarkGreen, 1);
                    e.DrawLine(p1, x1, y1, x4, y4);
                    
                   Frac(e, x4, y4, x3, y3, num);
                   e.DrawLine(p1, x4, y4, x3, y3);
 
                   Frac(e, x4, y4, x6, y6, num1);
                   e.DrawLine(p1, x4, y4, x6, y6);
 
                   Frac(e, x4, y4, x7, y7, num1);
                   e.DrawLine(p1, x4, y4, x7, y7);                   
            }
        }    
 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Frac(e.Graphics, 200, 400, 220, 300,0);
        }  
        
    }
}

если понятно что как надо, вод еще сам файл задания:Документ Microsoft Office Word.docx
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.03.2013, 21:45
Ответы с готовыми решениями:

Рисование на Форме
Как нарисовать радиальный двухцветный градиент на всей поверхности формы?

Рисование на форме
Привет, помогите пожалуйста понять почему не выводится прямоугольник на форму при запуске программы. using System; using...

Рисование в форме
Добрый день. Можно ли в C# сделать аналогично как в FreePascal:...

5
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
19.03.2013, 08:49
Нарыл где-то в нете проект на Делфях переделал.. На форму закинь Timer с интервалом 1 я ставил, ну и процедуры подключи, вот код:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Фрактал
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int T1, FPS;
        Single Alpha, Beta, KA, KB;
        const int LMin = 36;
        Single CosA, SinA, CosB, SinB;
        private void timer1_Tick(object sender, EventArgs e)
        {
            T1++;
              Alpha = Alpha + KA;
              if ((Alpha < -Math.PI / 60) || (Alpha > Math.PI / 60)) KA = -KA;
              Beta = Beta + KB;
              if ((Beta < Math.PI / 8 - Math.PI / 60) || (Beta > Math.PI / 8 + Math.PI / 60)) KB = -KB;
              FPS++;
              if (T1 > 1000)
              {
                  this.Text = "FPS: " + FPS.ToString();
                  T1 = 0; FPS = 0;
              }
            this.Invalidate();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            Alpha = 0; Beta = (Single)(Math.PI / 8);
            KA = 0.003F;
            KB = 0.002F;
            T1 = 0;
            FPS = 0;
            timer1.Enabled = true;
        }
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Bitmap BitMap = new Bitmap(this.Width, this.Height);
            Graphics c = Graphics.FromImage(BitMap);
            CosA = (Single)Math.Cos(Alpha);
            SinA = (Single)Math.Sin(Alpha);
            CosB = (Single)Math.Cos(Beta);
            SinB = (Single)Math.Sin(Beta);
            Fr(new Point(250, 400), new Point(300, 10), 0, c);
            e.Graphics.DrawImage(BitMap, 0, 0);
        }
        private void Fr(Point A, Point B, int Num, Graphics c)
        {
            Point C = new Point();
            Point E = new Point();
            Point F = new Point();
            Point G = new Point();
            Point D = new Point();
            Single K1 = 0.18F, K2 = 0.6F;
            if (Math.Pow(B.X - A.X,2) + Math.Pow(B.Y - A.Y,2) > LMin)
            {
                C.X = (int)((B.X - A.X) * CosA - (B.Y - A.Y) * SinA + A.X);
                C.Y = (int)((B.X - A.X) * SinA + (B.Y - A.Y) * CosA + A.Y);
                D.X = (int)(A.X * (1 - K1) + C.X * K1);
                D.Y = (int)(A.Y * (1 - K1) + C.Y * K1);
                E.X = (int)(A.X * (1 - K2) + C.X * K2);
                E.Y = (int)(A.Y * (1 - K2) + C.Y * K2);
                F.X = (int)((E.X - D.X) * CosB - (E.Y - D.Y) * SinB + D.X);
                F.Y = (int)((E.X - D.X) * SinB + (E.Y - D.Y) * CosB + D.Y);
                G.X = (int)((E.X - D.X) * CosB + (E.Y - D.Y) * SinB + D.X);
                G.Y = (int)(-(E.X - D.X) * SinB + (E.Y - D.Y) * CosB + D.Y);
                Pen P = new Pen(Color.Green);
                c.DrawLine(P, A, D);
                c.DrawLine(P, A.X + 100, A.Y, D.X + 100, D.Y);
                c.DrawLine(P, A.X - 100, A.Y, D.X - 100, D.Y);
                Fr(D, C, Num, c);
                Fr(D, F, Num + 1, c);
                Fr(D, G, Num + 1, c);
            }
        }
    }
}
1
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
19.03.2013, 09:57
Лучший ответ Сообщение было отмечено как решение

Решение

Без таймера, по описанному алгоритму. Результат во вложении. Проект под VS2012, Framework 3.0
Миниатюры
Рисование фрактала на форме  
Вложения
Тип файла: zip sourceCode.zip (12.9 Кб, 470 просмотров)
4
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
19.03.2013, 12:18
Цитата Сообщение от ViterAlex Посмотреть сообщение
Проект под VS2012, Framework 3.0
Открыл в 2008 версии за 5 минут...
Как сохраняешь проект, что там намного меньше фалов, чем в стандартном проекте?
0
19.03.2013, 12:26

Не по теме:

Сохраняю как обычно, но папки bin и obj исключаю при создании архива

2
2 / 2 / 0
Регистрация: 02.06.2012
Сообщений: 60
19.03.2013, 14:48  [ТС]
спасибо)) все работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2013, 14:48
Помогаю со студенческими работами здесь

Рисование в форме
На форме TextBox1,TextBox2,TextBox3, кнопка, и поле для рисования... По введенным коэффициента уравнения Ax^2+Bx+C=0 (Где ABC -...

Рисование на форме из класса
Разбираюсь в классах c#. Хочу сделать класс, в котором был бы метод, рисующий какой-либо объект на форме, допустим, прямоугольник. Но я не...

Рисование на форме мнемосхемы
Всем привет! Есть приложение на WinForms, результаты расчета выводятся в таблицу. Теперь требуется вывести результаты на мнемосхему....

Попиксельное рисование на форме
Необходимо рисовать изображение на форме (или в отдельном окне) по пикселям. Чтобы в любой момент можно было бы зарисовать любой пиксель ...

Рисование Bitmap-ов на форме
Подскажите , как на форме нарисовать несколько Bitmap-ов , и динамически менять их место-положение ?


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru