Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 9
1

C# Правильный треугольник

18.04.2011, 15:13. Показов 2361. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем снова нужна помощь. Необходимо чтобы в панельках формировались рандомные правильные треугольники
Код выглядит следующим образом (все очень криво, но рандомные треугольники он формирует):

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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 I_Lab_3 {
    public partial class main : Form 
    {
        const int NL = 2, NC = 4, NP = 300;//NL - Колличество строк; NC - колличество столбцов; NP - количество точек
        int[] mc, mp;//mc - массив цветов; mp - массив элементов
        double[] nx, ny;//координаты по осям X и Y
        Color[] col;//массив цветов
        Color cf;
        Random r = new Random();
        Panel[] panels;
        int wp, hp, ip = 0, ni, nj, ncol; // wp(ширина франгмета); hp(высота фрагмента); ip(индекс фрагмента); 
        // ni(номер строки текущего фрагмента ip); nj(номер стлбца текущего фрагмента ip); ncol(количество цветов в массиве )
        //int shift; //коэффициент смещения цвета
        
        
        
        public main() 
        {
            InitializeComponent();
            nx = new double[NP]; ny = new double[NP];
            SetWp();//вызов расчета ширины и высоты фрагмента
            col = new Color[] { Color.Blue, Color.Brown, 
                                Color.Cyan, Color.Fuchsia, 
                                Color.Green, Color.GreenYellow, 
                                Color.LemonChiffon, Color.Lime, 
                                Color.Magenta, Color.Maroon, 
                                Color.Navy, Color.Orange, 
                                Color.Purple, Color.Red, 
                                Color.Silver, Color.Tomato, 
                                Color.Violet, Color.BlueViolet, 
                                Color.Coral, Color.Lime};
            ncol = col.Length;//количество цветов
            mp = new int[NL * NC]; mc = new int[ncol];
            cf = Color.FromArgb(rBar.Value, gBar.Value, bBar.Value);//цвет задаваемый ползунками на полосах прокрутки
            for (int i = 0; i < NL * NC; i++) mc[i] = r.Next(ncol);//случайный цвет из col
            GenPoints();//генерация случайных Х и Y координат
            panels = new Panel[8];
            panels[0] = panel1; panels[1] = panel2; panels[2] = panel3; panels[3] = panel4; panels[4] = panel5; panels[5] = panel6; panels[6] = panel7; panels[7] = panel8;
            Initial();//вызов прорисовки
        }
            
        
        //расчет ширины и высоты фрагмента
        void SetWp() 
        {
            wp = (Width - 20) / NC;//ширина
            hp = (Height - 20 - tlp2.Height) / NL;//высота
        }
 
        //ni, nj для x 
        void SetNi(int x) { ni = x / NL; nj = x % NL; } 
 
        
        //генерация случайных Х и Y координат фрагмента формы
        void GenPoints() 
        {
            for (int i = 0; i < NP; i++) 
            {
                nx[i] = r.NextDouble() * wp;//точки по оси Х
                ny[i] = r.NextDouble() * hp;//точки по оси Y
            }
            for (int i = 0; i < NL * NC; i++) mp[i] = r.Next(NP);
        }
 
        void panels_Paint(object sender, PaintEventArgs e) 
        {
            int i;
            Graphics g = e.Graphics;
            Point[] Ptn = new Point[3];
            BackColor = cf;
            for (i = 0; i < NL * NC; i++) 
            {
                SetNi(i);
                Pen p = new Pen(col[mc[ip]], 5);
                Brush b = new SolidBrush(col[mc[ip]]);
                Ptn[0] = new Point((int)(nx[(mp[i] + 0) % NP] + ni * wp), (int)(ny[(mp[i] + 0) % NP] + nj * hp));
                Ptn[1] = new Point((int)(nx[(mp[i] + 1) % NP] + ni * wp), (int)(ny[(mp[i] + 1) % NP] + nj * hp));
                Ptn[2] = new Point((int)(nx[(mp[i] + 2) % NP] + ni * wp), (int)(ny[(mp[i] + 2) % NP] + nj * hp));
                g.DrawPolygon(p, Ptn);
                g.FillPolygon(b, Ptn);
            }
        }
 
        void Initial()
    {
        foreach (Panel pnl in panels) 
        {
            pnl.Invalidate(); pnl.Refresh();
           // Graphics g = panel1.CreateGraphics(panels_Paint);
            pnl.Paint += new PaintEventHandler(panels_Paint);
        }   
    }
 
        private void button1_Click(object sender, EventArgs e) {
            for (int i = 0; i < NL * NC; i++) mc[i] = r.Next(ncol);
            for (int i = 0; i < NL * NC; i++) mp[i] = r.Next(NP);
            Initial();
          //  SetInvalidate(); 
        }
 
        private void main_Resize(object sender, EventArgs e) {
            SetWp();
        }
 
        //красный оттенок
        private void rBar_Scroll(object sender, ScrollEventArgs e) {
            cf = Color.FromArgb(rBar.Value, gBar.Value, bBar.Value);
            BackColor = cf;
        }
        //зеленый оттенок
        private void gBar_Scroll(object sender, ScrollEventArgs e) {
            cf = Color.FromArgb(rBar.Value, gBar.Value, bBar.Value);
            BackColor = cf;
        }
        //синий оттенок
        private void bBar_Scroll(object sender, ScrollEventArgs e) {
            cf = Color.FromArgb(rBar.Value, gBar.Value, bBar.Value);
            BackColor = cf;
        }       
 
    }
}
Мб у кого-нибудь есть идеи...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2011, 15:13
Ответы с готовыми решениями:

Правильный треугольник
Помогите пожалуйста.Если в данной задаче имеются 2 способа решения,напишите. Докажите ,что сумма...

Правильный треугольник
Какова должна быть длина стороны правильного треугольника a,чтобы из него можно было вырезать n...

правильный треугольник и квадрат
Задача : На стороне правильного треугольника , вписанного в окружность радиуса 3 ДМ ,построен...

Класс правильный треугольник
ребята помогите создать класс- правильный треугольник

9
99 / 100 / 16
Регистрация: 30.03.2011
Сообщений: 350
18.04.2011, 17:01 2
и что требуется если он все рисует?
0
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 9
18.04.2011, 17:03  [ТС] 3
Он рисует рандомные треугольники, а нужно чтоб они еще и правильными (т.е. все стороны равны) были =(
0
194 / 193 / 17
Регистрация: 07.11.2010
Сообщений: 477
18.04.2011, 17:31 4
Цитата Сообщение от SkazOff Посмотреть сообщение
Он рисует рандомные треугольники, а нужно чтоб они еще и правильными (т.е. все стороны равны) были =(
Ну вот тебе и обычная задача по геометрии:
1) по известным координатам центра правильного треугольника, радиусу описанной окружности и углу поворота определить координаты вершин треугольника
2) рандомно меняешь координаты центра, радиус описанной окружности и угол поворота - получаешь рандомный правильный треугольник
0
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 9
18.04.2011, 20:17  [ТС] 5
Leax, Спасибо, но теперь я совсем запутался, точнее где то перемудрил (читать тупанул). Что происходит теперь: при создание формы формируются рандомные-правильные (УРА!) треугольники, но при нажатие на кнопку, видимо происходит зацикливание и треугольники множатся, что самое интересное при изменение цвета формы (с помощью ползунков) происходит тоже самое. Где она зацикливается в упор не вижу=(
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
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 I_Lab_3 {
    public partial class main : Form 
    {
        const int NL = 2, NC = 4, NP = 300;//NL - Колличество строк; NC - колличество столбцов; NP - количество точек
        int[] mc, mp;//mc - массив цветов; mp - массив элементов
        double[] nx, ny;//координаты по осям X и Y
        Color[] col;//массив цветов
        Color cf;
        Random r = new Random();
        Panel[] panels;
        int wp, hp, ip = 0, ni, nj, ncol; // wp(ширина франгмета); hp(высота фрагмента); ip(индекс фрагмента); 
        // ni(номер строки текущего фрагмента ip); nj(номер стлбца текущего фрагмента ip); ncol(количество цветов в массиве )
        //int shift; //коэффициент смещения цвета
        
        
        
        public main() 
        {
            InitializeComponent();
            nx = new double[NP]; ny = new double[NP];
            SetWp();//вызов расчета ширины и высоты фрагмента
            col = new Color[] { Color.Blue, Color.Brown, 
                                Color.Cyan, Color.Fuchsia, 
                                Color.Green, Color.GreenYellow, 
                                Color.LemonChiffon, Color.Lime, 
                                Color.Magenta, Color.Maroon, 
                                Color.Navy, Color.Orange, 
                                Color.Purple, Color.Red, 
                                Color.Silver, Color.Tomato, 
                                Color.Violet, Color.BlueViolet, 
                                Color.Coral, Color.Lime};
            ncol = col.Length;//количество цветов
            mp = new int[NL * NC]; mc = new int[ncol];
            cf = Color.FromArgb(rBar.Value, gBar.Value, bBar.Value);//цвет задаваемый ползунками на полосах прокрутки
            for (int i = 0; i < NL * NC; i++) mc[i] = r.Next(ncol);//случайный цвет из col
            GenPoints();//генерация случайных Х и Y координат
            panels = new Panel[8];
            panels[0] = panel1; panels[1] = panel2; panels[2] = panel3; panels[3] = panel4; panels[4] = panel5; panels[5] = panel6; panels[6] = panel7; panels[7] = panel8;
            Initial();//вызов прорисовки
        }
            
        
        //расчет ширины и высоты фрагмента
        void SetWp() 
        {
            wp = (Width - 20) / NC;//ширина
            hp = (Height - 20 - tlp2.Height) / NL;//высота
        }
 
        //ni, nj для x 
        void SetNi(int x) { ni = x / NL; nj = x % NL; } 
 
        
        //генерация случайных Х и Y координат фрагмента формы
        void GenPoints() 
        {
            for (int i = 0; i < NP; i++) 
            {
                nx[i] = r.NextDouble() * wp;//точки по оси Х
                ny[i] = r.NextDouble() * hp;//точки по оси Y
            }
            for (int i = 0; i < NL * NC; i++) mp[i] = r.Next(NP);
        }
 
        void panels_Paint(object sender, PaintEventArgs e) 
        {
            int i;
            double wc, hc, R, dx, dy;
            wc = r.NextDouble() * (wp / 2); hc = r.NextDouble() * (hp / 2);//центр координат         
            R = r.NextDouble()*(hc/2); 
            dx = 0.5*R;
            dy = Math.Sqrt(R*R-dx*dx);
            Graphics g = e.Graphics;
            Point[] Ptn = new Point[3];
            BackColor = cf;
            
            for (i = 0; i < NL * NC; i++) 
            {
        //        SetNi(i);
                Pen p = new Pen(col[mc[ip]], 5);
                Brush b = new SolidBrush(col[mc[ip]]);
                Ptn[0] = new Point((int)(nx[i]=wc+R), (int)(ny[i]=hc));//A
                Ptn[1] = new Point((int)(nx[i]=wc-0.5*R), (int)(ny[i]=hc-dy));//B
                Ptn[2] = new Point((int)(nx[i]=wc-0.5*R), (int)(ny[i]=hc+dy));//C
                g.DrawPolygon(p, Ptn);
                g.FillPolygon(b, Ptn);
            }
            
        }
 
        void Initial()
    {     
            //запись на панель
            foreach (Panel pnl in panels){
            pnl.Invalidate(); pnl.Refresh();
          // Graphics g = panel1.CreateGraphics(panels_Paint);
            pnl.Paint += new PaintEventHandler(panels_Paint);}   
    }
 
        private void button1_Click(object sender, EventArgs e) {
            for (int i = 0; i < NL * NC; i++) mc[i] = r.Next(ncol);
          //  for (int i = 0; i < NL * NC; i++) mp[i] = r.Next(NP);
            Initial();
           // g.Clear(Color.Black);
          //  SetInvalidate(); 
        }
 
        private void main_Resize(object sender, EventArgs e) {
            SetWp();
        }
 
        //красный оттенок
        private void rBar_Scroll(object sender, ScrollEventArgs e) {
            cf = Color.FromArgb(rBar.Value, gBar.Value, bBar.Value);
            BackColor = cf;
        }
        //зеленый оттенок
        private void gBar_Scroll(object sender, ScrollEventArgs e) {
            cf = Color.FromArgb(rBar.Value, gBar.Value, bBar.Value);
            BackColor = cf;
        }
        //синий оттенок
        private void bBar_Scroll(object sender, ScrollEventArgs e) {
            cf = Color.FromArgb(rBar.Value, gBar.Value, bBar.Value);
            BackColor = cf;
        }        
 
    }
}
Добавлено через 27 минут
+Цвета треугольников должны быть рандомные тоже, т.е. в каждой панели треугольник другого цвета, а они теперь одинаковые =(
0
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 9
24.04.2011, 16:31  [ТС] 6
UPD:
Снова нид помощь все с той же прогой.
Собственно почти все ном, но при изменение цвета формы с помощью скрол баров рисунок стирается+при ресайзе формы, треугольники меняют свое место положение=(
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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 ILab_3_p {
    public partial class F1 : Form 
    {
        const int NL = 2, NC = 4, NP = 300;//NL - Колличество строк; NC - колличество столбцов; NP - количество точек
        int[] mc, mp;//mc - массив цветов; mp - массив элементов
        double[] nx, ny;//координаты по осям X и Y
        Color[] col;//массив цветов
        Color cf;
        Panel[] panels;
        int wp, hp, ip = 0, ni, nj, ncol;// wp(ширина франгмета); hp(высота фрагмента); ip(индекс фрагмента); 
        // ni(номер строки текущего фрагмента ip); nj(номер стлбца текущего фрагмента ip); ncol(количество цветов в массиве )
        Random r = new Random();
 
 
        //генерация случайных Х и Y координат фрагмента формы
        void GenPoints() 
        {
            for (int i = 0; i < NP; i++) 
            {
                nx[i] = r.NextDouble() * wp;//точки по оси Х
                ny[i] = r.NextDouble() * hp;//точки по оси Y
            }
            for (int i = 0; i < NL * NC; i++) mp[i] = r.Next(NP);
        }
 
        //расчет ширины и высоты фрагмента
        void SetWp() 
        {
            wp = (Width - 20) / NC;//ширина
            hp = (Height - 40 - tlp2.Height) / NL;//высота
        }
 
 
        //ni, nj для x 
        void SetNi(int x) { ni = x / NL; nj = x % NL; }
 
 
        void SetInvalidate() 
        {
            SetNi(ip);
            Rectangle rc = new Rectangle(ni * wp, nj * hp, wp, hp);
            Invalidate();
        }
 
 
        public F1() 
        {
            InitializeComponent();
            nx = new double[NP]; ny = new double[NP];
            SetWp();//вызов расчета ширины и высоты фрагмента
            col = new Color[] {Color.Blue, Color.Brown, 
                                Color.Cyan, Color.Fuchsia, 
                                Color.Green, Color.GreenYellow, 
                                Color.LemonChiffon, Color.Lime, 
                                Color.Magenta, Color.Maroon, 
                                Color.Navy, Color.Orange, 
                                Color.Purple, Color.Red, 
                                Color.Silver, Color.Tomato, 
                                Color.Violet, Color.BlueViolet, 
                                Color.Coral};
 
            ncol = col.Length;//количество цветов
            mp = new int[NL * NC];
            mc = new int[ncol];
            cf = Color.FromArgb(hScrollBar1.Value, hScrollBar2.Value, hScrollBar3.Value);//цвет задаваемый ползунками на полосах прокрутки
            for (int i = 0; i < NL * NC; i++) mc[i] = r.Next(ncol);//случайный цвет из col
            GenPoints();//генерация случайных Х и Y координат
            panels = new Panel[8];
            panels[0] = panel1; panels[1] = panel2; panels[2] = panel3; panels[3] = panel4; panels[4] = panel5; panels[5] = panel6; panels[6] = panel7; panels[7] = panel8;
            Paints();//вызов прорисовки
        }
        
 
        private void F1_Paint(object sender, PaintEventArgs e) 
        {
            Paints();
        }
 
 
        //прорисовка треугльника
        void Paints() 
        {
            int i;
            double wc, hc, R, dx, dy;
            BackColor = cf;        
            for (i = 0; i < NL * NC; i++) 
            {
                SetNi(ip); 
                wc = r.NextDouble() * (wp / 2); hc = r.NextDouble() * (hp / 2);//центр координат         
                R = r.NextDouble() * (hc / 2);
                dx = 0.5 * R;
                dy = Math.Sqrt(R * R - dx * dx);
                Graphics g = panels[i].CreateGraphics();
                g.Clear(cf);
                Point[] Ptn = new Point[3];
                Pen p = new Pen(col[mc[ip]], 5);
                Brush b = new SolidBrush(col[mc[i]]);
                Ptn[0] = new Point((int)(nx[i] = (wc + R) + ni * wp), (int)(ny[i] = hc + nj * hp));//A
                Ptn[1] = new Point((int)((nx[i] = wc - 0.5 * R) + ni * wp), (int)(ny[i] = hc - dy + nj * hp));//B
                Ptn[2] = new Point((int)(nx[i] = wc - 0.5 * R + ni * wp), (int)(ny[i] = hc + dy + nj * hp));//C
                g.DrawPolygon(p, Ptn);
                g.FillPolygon(b, Ptn);
                
            }
        }
 
 
        private void button1_Click(object sender, EventArgs e) 
        {
            
            for (int i = 0; i < NL * NC; i++) mp[i] = r.Next(NP);
            for (int i = 0; i < NL * NC; i++) mc[i] = r.Next(ncol);
            Paints();
           // SetInvalidate();    
        }
 
        //изменение цвета формы
        private void hScrollBar3_Scroll(object sender, ScrollEventArgs e) 
        {
            cf = Color.FromArgb(hScrollBar1.Value, hScrollBar2.Value, hScrollBar3.Value);
            BackColor = cf;
        }
 
 
        //ресайз формы
        private void F1_Resize(object sender, EventArgs e) 
        {
            SetWp();
        }
    }
}
Заранее благодарен

Добавлено через 14 часов 47 минут
Вопрос все еще в силе. С ресайзом в принципе не важно (просто отменил вообще какую либо его возможность), но со скролбарами все равно проблема.

Добавлено через 5 часов 57 минут
Вроде бы ошибка вот в этих строчках
C#
1
2
3
Ptn[0] = new Point((int)(nx[i] = (wc + R) + ni * wp), (int)(ny[i] = hc + nj * hp));//A
Ptn[1] = new Point((int)((nx[i] = wc - 0.5 * R) + ni * wp), (int)(ny[i] = hc - dy + nj * hp));//B
Ptn[2] = new Point((int)(nx[i] = wc - 0.5 * R + ni * wp), (int)(ny[i] = hc + dy + nj * hp));//C
Мб у кого-нить есть идеи как исправить?
0
194 / 193 / 17
Регистрация: 07.11.2010
Сообщений: 477
25.04.2011, 00:07 7
Сам мало рисовал. Но м.б. если такие проблемы, то нужно рисовать другим способом/на другом элементе? Тут темы пролетали уже несколько раз связанные с рисованием. Почитали бы - может что поможет...
0
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 9
25.04.2011, 11:12  [ТС] 8
Да я читал, другой элемент не подойдет=( препод строго требует именно на Panel, да и способ тоже он сказал. Тут глюк именно в формуле для правильного треугольника, т.е. если я например вместо (wc+R) ставлю какое-либо число (70-80-90-т.д.), то все отлично. Может быть из-за типов, хотя я вроде прописал (int).
З.Ы. ну да ладно, завтра в любом случае узнаю
0
начал понимать msdn
57 / 57 / 6
Регистрация: 11.03.2010
Сообщений: 232
25.04.2011, 19:02 9
Чтобы они не стирались при Ресайзе или другом событии нужно:
1. При создании очередного треугольника занести его координаты в какой-то массив данных (будь то таблица или вообще ваш собственный класс).
2. При каждом ресайзе перерисовывать их, брать данные из (вашей таблицы или класса).

И как бы я рисовал эти треугольники:

1. Создаю класс "Треугольник", который содержит 3 точки, цвет
2. Создаю <list> из моего класса "Треугольник"
3. Заполняю свой list рандомными треугольниками. Нужны правильные? заполняем правильными, длина стороны известна, угол тоже между прямыми.
4. Добавляю необходимое количество панелей на форму.
5. Заполняю свои панели треугольниками из своего листа, редактирую их размеры (размеры панелей) и положение на форме.
6.При ресайзе, или смене цвета как у тебя, заполняю заново эти же панели, уже имеющимися данными.
7. Если нужно сделать новые треугольники, то делаю заново пункты 3,4,5.
1
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 9
25.04.2011, 21:34  [ТС] 10
В общем всем спасибо, подсказали мне как делать. Теперь все получилось. Вот "итоговый" код программы:

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
88
89
90
91
92
93
94
95
96
97
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 ILab_3_p {
    public partial class F1 : Form     {
        int[] mc;
        Color[] col;//массив цветов
        Color cf;
        Panel[] pnl;
        int ncol;  //количество цветов в массиве 
        Random r = new Random();
        Point[] Cen;  // центры треугольников
        int[] R;    // радиус треугольника  
 
        public F1()         {
            InitializeComponent();
            col = new Color[] {Color.Blue, Color.Brown, 
                                Color.Cyan, Color.Fuchsia, 
                                Color.Green, Color.GreenYellow, 
                                Color.LemonChiffon, Color.Lime, 
                                Color.Magenta, Color.Maroon, 
                                Color.Navy, Color.Orange, 
                                Color.Purple, Color.Red, 
                                Color.Silver, Color.Tomato, 
                                Color.Violet, Color.BlueViolet, 
                                Color.Coral};
            ncol = col.Length;//количество цветов
            mc = new int[ncol];
            pnl = new Panel[8] {p1, p2, p3, p4, p5, p6, p7, p8};
            R = new int[8];
            Cen = new Point[8];
            cf = Color.FromArgb(redBar.Value, greenBar.Value, blueBar.Value);//цвет задаваемый ползунками на полосах прокрутки
            for (int i = 0; i < 8; i++) mc[i] = r.Next(ncol);//случайный цвет из col
            GenPoints();//случайные центры и радиусы
            BackColor = Color.FromArgb(redBar.Value, greenBar.Value, blueBar.Value);
            Refresh();
        }
 
        //Random смена треугольников (изменение радиуса и положения центра)
        private void button1_Click(object sender, EventArgs e)         {
            for (int i = 0; i < 8; i++) mc[i] = r.Next(ncol);
            GenPoints();
            Refresh();
        }
        
       
        private void GenPoints()          {
            for (int i = 0; i < 8; i++)
            {
                Cen[i] = new Point((int)(r.NextDouble() * p2.Width/2),(int)(r.NextDouble() * p2.Height/2)); //рандомный центр фигуры
                R[i] = (int)(r.Next(37,73));//рандомный радиус фигуры    
                mc[i] = r.Next(ncol); // рандомный цвет        
            }
        }
 
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            int d = 0;
            int ip = 0;         // индекс панели
            int len = 3;       // углы
            if (sender == p1) ip = 0; 
            if (sender == p2) ip = 1;     
            if (sender == p3) ip = 2;     
            if (sender == p4) ip = 3;     
            if (sender == p5) ip = 4;     
            if (sender == p6) ip = 5;
            if (sender == p7) ip = 6;
            if (sender == p8) ip = 7;
            Graphics g = e.Graphics;
            double Rad = Math.PI / 180;     //к радианам    
            Point[] Ptn = new Point[len];  
            double a = 10, ad = 360 / len;//а - текущий угол,  ad - угол поворота      
            for (int i = 0; i < len; i++)
            {
                Ptn[i] = new Point((int)(Math.Sin(a * Rad) * R[ip]) + Cen[ip].X,  // расчет точек  
                                       (int)(Math.Cos(a * Rad) * R[ip]) + Cen[ip].Y); 
                a += ad;  //угол поворота
                
            }
            Pen gx = new Pen(col[mc[d]], 5);
            g.DrawPolygon(gx, Ptn);//обводка треугольника другим цветом
            g.FillPolygon(new SolidBrush(col[mc[ip]]), Ptn);  // заливаем треугольник
        }
        
        //цвет формы
        private void hScrollBar1_Scroll(object sender, ScrollEventArgs e) 
        {
            BackColor = Color.FromArgb(redBar.Value, greenBar.Value, blueBar.Value);
        }
    }       
}
Может быть кому-нибудь еще пригодится.
0
25.04.2011, 21:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2011, 21:34
Помогаю со студенческими работами здесь

Построить закрашенный правильный треугольник
Pascal. помогите пожалуйста,очень срочно. задание: закрашенный правильный треугольник с...

Как вписать правильный треугольник?
Замучался уже, ребят подскажите как мне вписать треугольник вот строю его по точкам, вписать его в...

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

Как вписать правильный треугольник в окружность?
Дан правильный треугольник вписанный в окружность. Координаты одного из углов x1; y1. Радиус...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru