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

Построить кривую Безье. Исключение не обработано

26.10.2020, 20:40. Показов 892. Ответов 4

Студворк — интернет-сервис помощи студентам
Пишет: "Входная строка имела неверный формат." в этих строках. Что не так?
C#
1
2
3
4
5
6
7
8
 p[0].X = Convert.ToInt32(textBox1.Text);
            p[0].Y = Convert.ToInt32(textBox2.Text);
            p[1].X = Convert.ToInt32(textBox3.Text);
            p[1].Y = Convert.ToInt32(textBox4.Text);
            p[2].X = Convert.ToInt32(textBox5.Text);
            p[2].Y = Convert.ToInt32(textBox6.Text);
            p[3].X = Convert.ToInt32(textBox7.Text);
            p[3].Y = Convert.ToInt32(textBox8.Text);
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
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApp9
{
    public partial class Form1 : Form
    {
        Point[] p = new Point[4]; // опорные точки
        Graphics g; // графический контент - холст
        double tim = 0.0; // параметр кривой [0,1]
 
        // точка на отрезке (р1,р2) от t
        PointF Lin1(PointF p1, PointF p2, double t)
        {
            PointF q = new PointF();
            q.X = Convert.ToSingle(p2.X * t + p1.X * (1 - t));
            q.Y = Convert.ToSingle(p2.Y * t + p1.Y * (1 - t));
            return q;
        }
 
        // метод де Кастельжо (с рекурсией)
        PointF CastR(Point[] p, double t, int n, int m)
        {
            if (n == 0)
                return p[m];
            else
                return Lin1(CastR(p, t, n - 1, m), CastR(p, t, n - 1, m + 1), t);
        }
 
        // конструктор класса
        public Form1()
        {
            InitializeComponent();
            g = this.pictureBox1.CreateGraphics(); // холст
                                                   // перенос опорных точек в массив
            p[0].X = Convert.ToInt32(textBox1.Text);
            p[0].Y = Convert.ToInt32(textBox2.Text);
            p[1].X = Convert.ToInt32(textBox3.Text);
            p[1].Y = Convert.ToInt32(textBox4.Text);
            p[2].X = Convert.ToInt32(textBox5.Text);
            p[2].Y = Convert.ToInt32(textBox6.Text);
            p[3].X = Convert.ToInt32(textBox7.Text);
            p[3].Y = Convert.ToInt32(textBox8.Text);
            timer1.Stop();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            // расчет точек кривой
            int N = Convert.ToInt32(textBox9.Text); //число
            double d = 1.0 / N; // шаг delta t
            double t = 0.0; // параметр t
            PointF q = new PointF(); // следующая точка
            PointF r = CastR(p, t, 3, 0); // начальная точка
            listBox1.Items.Clear(); // очистка списка для точек
            listBox1.Items.Add(r.X.ToString() + " " + r.Y.ToString());
 
            Pen pen = new Pen(Color.Tomato, 9); // перо
                                                // вывод точек в список и рисование кривой
            for (int i = 0; i < N; i++)
            {
                t += d;
                q = CastR(p, t, 3, 0); // следующая точка
                listBox1.Items.Add(q.X.ToString() + " " + q.Y.ToString());
                g.DrawLine(pen, r, q);
                r = q;
            }
 
            // проверка через метод из Graphics
            pen = new Pen(Color.Yellow, 3); // перо
            g.DrawBeziers(pen, p); // стандартный метод класса
        }
 
        // очистка и остановка
        private void button2_Click(object sender, EventArgs e)
        {
            g.Clear(Color.White);
            timer1.Stop();
        }
 
        // Старт иллюстрации метода де Кастельжо
        private void button3_Click(object sender, EventArgs e)
        {
            // timer1.Tick=40 мс
            timer1.Start();
        }
 
        // Иллюстрация метода де Кастельжо
        private void timer1_Tick(object sender, EventArgs e)
        {
            Pen pen = new Pen(Color.White);
            if (tim > 1.0)
                tim = 0.0;
            else
            {
                g.Clear(Color.White);
                pen.Width = 2;
                // соединяем исходные точки (3 отрезка)
                pen.Color = Color.Pink;
                g.DrawLines(pen, p);
                // два отрезка
                pen.Color = Color.Green;
                g.DrawLine(pen, CastR(p, tim, 1, 0), CastR(p, tim, 1, 1));
                g.DrawLine(pen, CastR(p, tim, 1, 1), CastR(p, tim, 1, 2));
                // один отрезок
                pen.Color = Color.Gold;
                g.DrawLine(pen, CastR(p, tim, 2, 0), CastR(p, tim, 2, 1));
                SolidBrush br = new SolidBrush(Color.Red);
                // искомая точка
                PointF qR = CastR(p, tim, 3, 0);
                g.FillEllipse(br, qR.X - 3, qR.Y - 3, 7, 7);
                // вся кривая
                pen.Color = Color.Blue;
                g.DrawBeziers(pen, p); // стандартный метод класса
                                       // изменение параметра
                tim += 0.0025;
            }
        }
 
        private void textBox8_TextChanged(object sender, EventArgs e)
        {
 
        }
 
        private void textBox10_TextChanged(object sender, EventArgs e)
        {
 
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2020, 20:40
Ответы с готовыми решениями:

Построить кривую Безье по 4 точкам использовать Bezier
Нужно построить кривую Безье по 4 точкам использовать Bezier (Graphics) код у меня есть и все запускается вот правда не рисует нечего. ...

Построить кривую Безье в Паскале
Всем привет! Задача состоит в том чтобы вывести на экран кривую Безье. Может кто подскажет с чего начать и как делать? Заранее спасибо!

Нарисовать кривую линию Безье
Помогите пожалуйста нарисовать кривую линию Безье на java.

4
76 / 54 / 22
Регистрация: 26.02.2017
Сообщений: 206
26.10.2020, 21:21
Цитата Сообщение от Alladey Посмотреть сообщение
Что не так?
То что эти строки находятся в конструкторе, а значит текстбоксы пустые. Вот и происходит исключение при попытке конвертировать пустую строку в Int32
0
2 / 2 / 0
Регистрация: 25.02.2020
Сообщений: 61
27.10.2020, 12:30  [ТС]
Svetlana Saphon, сейчас будет глупый вопрос, но... как это исправить? Изначально же она и должна быть пустая, чтобы потом после отладки и запуска проги вводить числа.
0
Just Do It!
 Аватар для XLAT
4212 / 2671 / 655
Регистрация: 23.09.2014
Сообщений: 9,093
Записей в блоге: 3
27.10.2020, 12:56
Цитата Сообщение от Alladey Посмотреть сообщение
но... как это исправить?
Цитата Сообщение от Alladey Посмотреть сообщение
C#
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// конструктор класса
        public Form1()
        {
            InitializeComponent();
            g = this.pictureBox1.CreateGraphics(); // холст
                                                   // перенос опорных точек в массив
            p[0].X = Convert.ToInt32(textBox1.Text);
            p[0].Y = Convert.ToInt32(textBox2.Text);
            p[1].X = Convert.ToInt32(textBox3.Text);
            p[1].Y = Convert.ToInt32(textBox4.Text);
            p[2].X = Convert.ToInt32(textBox5.Text);
            p[2].Y = Convert.ToInt32(textBox6.Text);
            p[3].X = Convert.ToInt32(textBox7.Text);
            p[3].Y = Convert.ToInt32(textBox8.Text);
            timer1.Stop();
        }
C#
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
        // конструктор класса
        public Form1()
        {
            InitializeComponent();
            g = this.pictureBox1.CreateGraphics(); // холст
                                                   // перенос опорных точек в массив
            p[0].X = 10;
            p[0].Y = 10;
            p[1].X = 60;
            p[1].Y = 20;
            p[2].X = 70;
            p[2].Y = 80;
            p[3].X = 10;
            p[3].Y = 90;
            timer1.Stop();
        }
это если по быстрому, шоп компилировалось.

Добавлено через 8 минут
лучше:
когда будут готовы данные на вводе в текстбоксах -
вызовите:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        private void my_input()
        {
            try
            {
                p[0].X = Convert.ToInt32(textBox1.Text);
                p[0].Y = Convert.ToInt32(textBox2.Text);
                p[1].X = Convert.ToInt32(textBox3.Text);
                p[1].Y = Convert.ToInt32(textBox4.Text);
                p[2].X = Convert.ToInt32(textBox5.Text);
                p[2].Y = Convert.ToInt32(textBox6.Text);
                p[3].X = Convert.ToInt32(textBox7.Text);
                p[3].Y = Convert.ToInt32(textBox8.Text);
            }
            catch(exeption ex)
            {
                textBox1.Text = "ERROR INPUT!";
            }
        }
ещё лучше:
на вводе данных используйте:
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            char c = e.KeyChar;
            /// Только цифры!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            if (( c < 48 || c > 57) && c != 13 && c != 8)
            {   e.Handled = true;
                return;
            }
            /// Нажат ENTER
            else if (c == 13) 
            {
...
0
2 / 2 / 0
Регистрация: 25.02.2020
Сообщений: 61
27.10.2020, 13:01  [ТС]
XLAT, спасибо большое!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2020, 13:01
Помогаю со студенческими работами здесь

Получить кривую Безье заданной длины
Здравствуйте. Я программист. В процессе разработки появилась такая задача: есть два отрезка АВ и ВС. На них на одинаковом расстоянии...

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

Реализовать кривую Безье по четырем точкам
Помогите,пожалуйста,реализовать кривую Безье по 4-м точкам с помощью Graphics.DrawBezier()

Сконструировать кривую по заданным точкам методом Безье
Создать функцию, рисующую кривую и характеристическую ломанную. Оформить таблицу значений функции и отклонений от заданных значений в...

C# не обработано исключение
Ну что мне с этим делать, я уже заколебалась. Месяц прошел а проблема так и осталась.


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru