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

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

26.10.2020, 20:40. Показов 884. Ответов 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
4204 / 2662 / 654
Регистрация: 23.09.2014
Сообщений: 9,058
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
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
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru