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

Рисование линий разных размеров и цветов. Управление цветом в зависимости от условия

07.02.2012, 16:31. Показов 2788. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вопрос следующий у меня есть код в котором я рисую линии две нахожу их точки пересечения и так далее
вопрос следующий я хочу чтоб после отрисовок линий проверялось что если линии 1 длиннее
линии 2 то линия 1 будет красного (например) цвета, а линия 2 будет такого-то цвета.
А если линия 1 меньше линии 2 то другие цвета
Перепробовал разные варианты код не отрбатывается((( помогите пожалуйста.
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
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 WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Graphics gr;
            gr = this.CreateGraphics();
            Pen pn = new Pen(Color.Black, 3);
            int X1 = Convert.ToInt32(this.textBox1.Text); //ввод данных в текстбокс
            int Y1 = Convert.ToInt32(this.textBox2.Text); //ввод данных в текстбокс
            int X2 = Convert.ToInt32(this.textBox3.Text); //ввод данных в текстбокс
            int Y2 = Convert.ToInt32(this.textBox4.Text); //ввод данных в текстбокс
            gr.DrawLine(pn, X1, Y1, X2, Y2); 
        
            
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Graphics gr;
            gr = this.CreateGraphics();
            Pen pn1 = new Pen(Color.Black, 3);
            int X3 = Convert.ToInt32(this.textBox5.Text); //ввод данных в текстбокс
            int Y3 = Convert.ToInt32(this.textBox6.Text); //ввод данных в текстбокс
            int X4 = Convert.ToInt32(this.textBox8.Text); //ввод данных в текстбокс
            int Y4 = Convert.ToInt32(this.textBox9.Text); //ввод данных в текстбокс
            gr.DrawLine(pn1, X3, Y3, X4, Y4); 
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            // очистка TextBox
            Graphics gr;
            gr = this.CreateGraphics();
            gr.Clear(BackColor);
            textBox7.Text = "";
            textBox7.Clear();
            textBox10.Text = "";
            textBox10.Clear();
            textBox11.Text = "";
            textBox11.Clear();
            textBox12.Text = "";
            textBox12.Clear();
        }
        private void button4_Click(object sender, EventArgs e)
        {  
            //расчет точки пересечения по формуле и вывод данных в два текстбокса
            int x;
            int y;
            int X1 = Convert.ToInt32(textBox1.Text);
            int Y1 = Convert.ToInt32(textBox2.Text);
            int X2 = Convert.ToInt32(textBox3.Text);
            int Y2 = Convert.ToInt32(textBox4.Text);
            int X3 = Convert.ToInt32(textBox5.Text);
            int Y3 = Convert.ToInt32(textBox6.Text);
            int X4 = Convert.ToInt32(textBox8.Text);
            int Y4 = Convert.ToInt32(textBox9.Text);
            if (((X2 - X1) * (Y4 - Y3) * (X4 - X3) * (Y2 - Y1)) == 0)
                return;
            y = (Y1*(X2-X1)*(Y4-Y3)-X1*(Y2-Y1)*(Y4-Y3)-Y3*(X4-X3)*(Y2-Y1)+X3*(Y4-Y3)*(Y2-Y1))/((X2-X1)*(Y4-Y3)-(X4-X3)*(Y2-Y1));
            x = ((y - Y1) * (X2 - X1) + X1 * (Y2 - Y1)) / (Y2 - Y1);
            string s = Convert.ToString(x);
            string p = Convert.ToString(y);
            textBox7.Text = (s);
            textBox10.Text = (p);
        }
 
        private void button5_Click(object sender, EventArgs e)
        {
            double X1 = Convert.ToDouble(textBox1.Text);
            double X2 = Convert.ToDouble(textBox2.Text);
            double Y1 = Convert.ToDouble(textBox3.Text);
            double Y2 = Convert.ToDouble(textBox4.Text);
            double d;
            d = Math.Sqrt(Math.Pow(Y2 - Y1, 2) + Math.Pow(X2 - X1, 2)); //Math.Sqrt(...) - корень; Math.Pow(Х, 2) степень
            d = Math.Round(d,2); //ограничение выводимой переменной до второго знака после запятой
            string s = Convert.ToString(d);
            textBox11.Text = (s);
        }
 
        private void button6_Click(object sender, EventArgs e)
        {
            double X3 = Convert.ToDouble(textBox5.Text);
            double X4 = Convert.ToDouble(textBox6.Text);
            double Y3 = Convert.ToDouble(textBox8.Text);
            double Y4 = Convert.ToDouble(textBox9.Text);
            double p;
            p = Math.Sqrt(Math.Pow(Y4 - Y3, 2) + Math.Pow(X4 - X3, 2)); //Math.Sqrt(...) - корень; Math.Pow(Х, 2) степень
            p = Math.Round(p, 2);
            string s = Convert.ToString(p);
            textBox12.Text = (s);
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.02.2012, 16:31
Ответы с готовыми решениями:

Написать программу вывода линий разных цветов и размеров
Написать программу которая из двух углов (левый нижний и правый верхний) выводит линии разных цветов и разной длины.

Создать массив линий разных размеров
можно ли создать массив линий, тоесть массив в котором будут линии нарисованные(drawline) но разных размеров?

Нарисовать звезды на небе разных размеров и цветов
помогите пожалуйста создать программу : звёздное небо и чтобы появлялись и исчезали разноцветные звёзды в разных местах и разных размеров...

1
c#
 Аватар для temich-92
95 / 95 / 27
Регистрация: 25.03.2011
Сообщений: 290
07.02.2012, 19:58
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
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 woLines
{
    public partial class Form1 : Form
    {
        Panel panel;
        Graphics graphics;
 
        TextBox[] _textBox;
        Label linesCrossLabel;
 
        Pen
            pen1,
            pen2;
 
        string[] _tbText = { "0", "0", "100", "100", "0", "100", "100", "0" };
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            ClientSize = new System.Drawing.Size(500, 500);
 
            panel = new Panel();
            panel.Location = new Point(5, 5);
            panel.Size = new Size(ClientSize.Width - 115, ClientSize.Height - 10);
            Paint += new PaintEventHandler(Form1_Paint);
            Controls.Add(panel);
 
            graphics = panel.CreateGraphics();
 
            int x = ClientSize.Width - 105, y = 5;
 
            _textBox = new TextBox[8];
            for (int i = 0; i < 8; i++)
            {
                TextBox tb = new TextBox()
                {
                    Location = new Point(x, y),
                    Size = new Size(100, 25),
                    Text = _tbText[i]
                };
                tb.TextChanged += new EventHandler(tb_TextChanged);
                _textBox[i] = tb;
                Controls.Add(tb);
                y += 35;
            }
 
            linesCrossLabel = new Label()
            {
                AutoSize = true,
                Location = new Point(x, y),
                Text = ""
            };
            Controls.Add(linesCrossLabel);
        }
 
        void tb_TextChanged(object sender, EventArgs e)
        {
            int x11, y11, x12, y12;
            int x21, y21, x22, y22;
 
            graphics.Clear(Color.White);
 
            if (int.TryParse(_textBox[0].Text, out x11)
                && int.TryParse(_textBox[1].Text, out y11)
                && int.TryParse(_textBox[2].Text, out x12)
                && int.TryParse(_textBox[3].Text, out y12)
 
                && int.TryParse(_textBox[4].Text, out x21)
                && int.TryParse(_textBox[5].Text, out y21)
                && int.TryParse(_textBox[6].Text, out x22)
                && int.TryParse(_textBox[7].Text, out y22))
            {
                if (LenghtLine(x11, y11, x12, y12) > LenghtLine(x21, y21, x22, y22))
                {
                    pen1 = new Pen(Color.Red,2);
                    pen2 = new Pen(Color.Green,2);
                }
                else
                {
                    pen1 = new Pen(Color.Blue,2);
                    pen2 = new Pen(Color.Brown,2);
                }
                graphics.DrawLine(pen1, x11, y11, x12, y12);
                graphics.DrawLine(pen2, x21, y21, x22, y22);
 
                PointF point = XPoint(x11, y11, x12, y12, x21, y21, x22, y22);
 
                linesCrossLabel.Text = "X= " + point.X.ToString() + "\nY= " + point.Y.ToString();
            }
 
            Invalidate();
        }
 
        double LenghtLine(int x1, int y1, int x2, int y2)
        {
            return Math.Sqrt(Math.Pow((x2 * x2 - x1 * x1), 2) + Math.Pow((y2 * y2 - y1 * y1), 2));
        }
 
        PointF XPoint(int x11, int y11, int x12, int y12, int x21, int y21, int x22, int y22)
        {
            float znamenat = (y22 - y21) * (x12 - x11) - (x22 - x21) * (y12 - y11);
 
            float uA = ((x22 - x21) * (y11 - y21) - (y22 - y21) * (x11 - x21))
                / znamenat;
            float uB = ((x12 - x11) * (y11 - y21) - (y12 - y11) * (x11 - x21))
                / znamenat;
 
            return new PointF(x11 + uA * (x12 - x11), y11 + uA * (y12 - y11));
        }
 
        void Form1_Paint(object sender, PaintEventArgs e)
        {
            
        }
    }
}
сам проверку доработай:
Если знаменатель равен нулю, то прямые параллельны.
Если и числитель и знаменатель равны нулю, то прямые совпадают.
Если нужно найти пересечение отрезков, то нужно лишь проверить, лежат ли ua и ub на промежутке [0,1]. Если какая-нибудь из этих двух переменных 0 <= ui <= 1, то соответствующий отрезок содержит точку пересечения. Если обе переменные приняли значения из [0,1], то точка пересечения прямых лежит внутри обоих отрезков.
Для двух отрезков при достаточной разреженности объектов можно сначала проверять принципиальную возможность пересечения, сравнивая координаты концов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.02.2012, 19:58
Помогаю со студенческими работами здесь

Рисование полос разных цветов
Доброго времени суток форумчане помогите запутался в самом простом координаты полос в цикле чтобы шли параллельно одна за другой вот что у...

Рисование окружностей разных цветов
Написать программу, которая рисует на экране каждую окружность с задержкой по времени в 1000 мс. После полной прорисовки стирать...

Могут ли на экране высвечиваться одновременно отрезки прямых линий разных цветов?
Могут ли на экране высвечиваться одновременно отрезки прямых линий разных цветов?

Рисование линий в зависимости от того, какая клавиша нажата
доброго времени суток. совсем недавно начал изучать c#, поэтому строго не судите. никак не моуг справиться с DrawLine. Нужно сделать так...

Написать программу чтобы по нажатию кнопки рисовалось 25 кругов разных цветов и размеров
С помощью ellipse нужно, чтобы по нажатию на кнопку рисовалось 25 кругов разных цветов и размеров, не знаю как написать программу


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
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, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru