Рисование дуги на C#


Недавно набросал простую программку с математическими расчетами и рисованием (демонстрацией). Положа руку на сердце, мне нравятся такие – быстро, с небольшим ТЗ, немного подумать, рассчитать и рисовать. Итак, вот текст задачи.



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

Ну что ж, надо значит делаем. Большинство программ (и это верно не только по отношению к языку си шарп) начинается с интерфейса. На форму набрасываем кнопку, параметры, выпадающий список и область для рисования.

По сути для рисования самой дуги требуется только один метод –

e.Graphics.DrawArc(redPen, rect, startAngle, sweepAngle);
где
  • redPen – экземпляр класса Pen(), в котором мы задаем цвет и толщину линии.
  • rect – прямоугольник (у нас квадрат), в который вписываем окружность
  • startAngle – начальный угол
  • sweepAngle – конечный угол
Так как у нас три варианта, то по по радиусу и центральному углу рисовать проще всего. Первый угол задаем ноль, а второй:

sweepAngle = (float)ugol;
то есть приводим к типу float.

Дальше по по радиусу и длине дуги вычисляем конечный угол:

sweepAngle = (180 * duga) / (3.14F * radius);
                if (sweepAngle > 360) {
                    MessageBox.Show("Такая дуга не существует!");
                    return;
                }
Обратите внимание, что проверяем, чтобы угол не был больше 360 градусов. Правда, метод DrawArc и в этом случае корректно отработает, но все же.

Ну и последний вариант - по длине дуги и углу

double R = (180 * duga) / (3.14 * ugol);
                radius = (int)R;
                sweepAngle = (float)ugol;
Здесь сначала вычисляем радиус и приводим его и угол к нужным типам. Квадрат для окружности вычисляется так.

Rectangle rect = new Rectangle(150 - radius, 150 - radius, radius * 2, radius * 2);
Вся программа (логика) рисования дуги на си шарп по различным параметрам уместилась в сотню строк кода.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си шарп




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.



.NET Framework и среда Common Language Runtime
Вечер 2, Соната 2, Вечер 1
Урок 14. Префиксы, поддомены и подписанные роуты в Laravel