Рисование дуги на 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.