User Rating: 0 / 5

Теорема Пифагора и тригонометрические функции для нахождения центра линии при её рисовании на C# средствами GDI+

Теорема Пифагора и тригонометрические функции для нахождения центра линии при её рисовании на C# средствами GDI+

User Rating: 0 / 5

Изображение к статье создано при помощи нейросети Kandinsky

Всем привет.

Info icon by Icons8НА ЗАМЕТКУ
Друзья, я признаюсь честно, в этой статье я изобрёл "велосипед", т.к. поискав уже после написания этой статьи другие способы нахождения отрезка линии, я понял, что точка середины отрезка может быть найдена гораздо более простым способом - без использования теоремы Пифагора и тригонометрических функций. Поэтому, пожалуйста, отнеситесь к информации из данной статьи просто как к альтернативному и, надо сказать, более сложному способу нахождения координат середины отрезка. С публикации данную статью не снимаю, вдруг всё же кому-то будет чем-то интересен и полезен и этот вариант.

О том, как очень просто и быстро найти середину отрезка, описано, в частности, здесь: https://ru.wikihow.com/найти-середину-отрезка-прямой

В сегодняшней статье я расскажу о том, как найти и нарисовать центр линии на языке C# в приложении Windows Forms, используя для рисования доступные возможности и средства GDI+. В данный момент я разрабатываю одну программу для визуального проектирования игровых объектов 2D-игр, и в этой программе мне потребовалась реализация функционала "Линейка", который бы измерял расстояние между двумя точками линии, нарисованной на форме в приложении Windows Forms, а также находил бы центральную точку линии (отрезка между двумя заданными точками).

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

Если вы ещё не сталкивались с GDI+, то рекомендую перед этой статьёй прочитать другую мою вводную статью "Рисуем фигуры на C# при помощи средств GDI+" по отрисовке простых фигур средствами GDI+, где я кратко рассказываю про этот стандартный интерфейс графического устройства, предоставляю внешние ссылки по этой теме и объясняю, как рисовать различные фигуры на форме в приложении Windows Forms.

Итак, в контексте этой статьи мы напишем с вами программу для Windows Forms, в которой будем строить и рисовать линию по двум заданным нами точкам, а также находить центральную точку этой линии. Мы также будем выводить координаты X и Y для всех точек отрисованной линии: для граничных точек и центральной точки, координаты которой мы рассчитаем специальным образом при помощи упомянутой теоремы Пифагора и тригонометрической функции Cos (косинус).

В конце статьи, как обычно, я дам ссылку на архив с готовым проектом для среды Microsoft Visual Studio, который мы напишем в этой статье.

Давайте сразу посмотрим на то, как будет выглядеть разрабатываемая нами программа.

При запуске программа начнёт отслеживать движение курсора мыши и рисовать небольшую окружность - в месте центра курсора. А также выводить текущие координаты точки, соответствующей положению курсора мыши: 

 

Пока мы будем двигать курсором в области формы, мы тем самым будем выбирать начальную точку нашей линии. Для фиксации начальной точки линии нужно будет кликнуть по форме левой кнопкой мыши.

Добавить комментарий
Рисуем фигуры на C# при помощи средств GDI+

Рисуем фигуры на C# при помощи средств GDI+

User Rating: 0 / 5

Изображение к статье создано при помощи нейросети Kandinsky

Доброго времени суток, друзья.

В сегодняшней статье мы разберём с вами некоторые возможности GDI+ и научимся рисовать различные простые графические фигуры и примитивы на форме в приложении Windows Forms.

Описание того, что такое GDI+, можно найти по следующей ссылке на официальном сайте: https://learn.microsoft.com/ru-ru/dotnet/desktop/winforms/advanced/about-gdi-managed-code?view=netframeworkdesktop-4.8

Отмечу лишь кратко, что аббревиатура GDI обозначает Graphics Device Interface (т.е. интерфейс графического устройства), и по сути это часть операционной системы Windows, которая предоставляет возможность для создания векторных изображений и рисования. Также стоит упомянуть, что GDI+ является частью .NET Framework.

Итак, в рамках этой статьи мы рассмотрим возможности рисования при помощи средств GDI+ следующих фигур:

  • Прямоугольник (Rectangle) - нарисуем контур прямоугольника и закрашенный прямоугольник на форме
  • Эллипс (Ellipse) - нарисуем контур эллипса и закрашенный эллипс на форме
  • Полигон (Polygon) - нарисуем контур полигона и закрашенный полигон на форме
  • Дуга (Arc) - нарисуем на форме небольшой отрезок дуги. Дугой называется часть окружности или эллипса, заключённая между двумя заданными точками, принадлежащими этой окружности/эллипсу.
  • Сектор (Pie) - нарисуем на форме сектор и закрашенный сектор. Сектор похож на дугу, но отличается от неё тем, что две крайние точки дуги соединены радиальными линиями с центром окружности/эллипса.
  • Линии (Line) - нарисуем на форме 3 различных линии, каждая из которых будет иметь свой стиль штриха.
  • Фундаментальный сплайн (Curve) - мы нарисуем на форме несколько фундаментальных сплайнов. Три из них будут открытыми, и два из них будут закрытыми. О том, какие есть различия между открытыми и закрытыми фундаментальными сплайнами, мы посмотрим далее по тексту статьи.
  • Графический путь (GraphicsPath) - нарисуем на форме графический путь, состоящий из нескольких линий и дуги
  • Текст - выведем на форме текст, содержащийся в тестовой строковой переменной

Давайте сразу посмотрим на тот результат, который мы получим в конце статьи. Итак, у нас будет простое приложение для Windows Forms, с единственной главной формой, отображающейся при старте приложения. И на форме будут нарисованы перечисленные выше фигуры следующим образом:

 

Добавить комментарий
Пример на C# с перегрузкой операторов, индексатором и реализацией IEnumerable для операций над множествами

Пример на C# с перегрузкой операторов, индексатором и реализацией IEnumerable для операций над множествами

User Rating: 0 / 5

Изображение к статье создано при помощи нейросети Kandinsky

Всем привет.

В этой статье мы постараемся затронуть следующие темы, относящиеся к разработке программ на C#:

  • перегрузка операторов (на примере перегрузки операторов +, -, /, *)
  • индексаторы (не основная тема статьи, но индексатор будет применён в примере рассматриваемого кода)
  • перечислители и реализация интерфейса IEnumerable

Предполагается, что читатель уже имеет некоторый опыт разработки программ на C#, поскольку в примерах кода ниже помимо перечисленных тем также будет рассмотрена и тема универсальных классов и методов. Если вы ещё не сталкивались с этими понятиями при разработке на C#, то могу порекомендовать официальную документацию, например, эту статью.

В контексте данной статьи прежде всего будет сделан упор на перегрузку операторов, и мы напишем консольную программу на C#, демонстрирующую возможности перегрузки операторов в языке C#.

В качестве задачи мы реализуем следующую несложную концепцию: предположим, что мы хотим в программе на C# уметь определять некоторые множества чисел, например, множество чисел, тип которых intdecimal или long и так далее. И мы хотим, чтобы эти множества поддерживали между собой операции сложения (+), вычитания (-), деления (/) и умножения (*).

Рассмотрим на примере. Пусть у нас есть 2 множества целых чисел, и имена этих множеств - A и B, а тип данных каждого элемента множества - это int:

Множество A: 

Позиция элемента: 0 1 2 3 4 5
Элемент множества в позиции: 5 7 10 15 35 25

Как видим, в множестве всего 6 элементов, первый равен 5, и его позиция 0. Второй равен 7, и его позиция 1 и так далее.

Множество B: 

Позиция элемента: 0 1 2 3 4 5
Элемент множества в позиции: 207 402 347 572 721 928

В этом множестве также 6 элементов, первый равен 207, и его позиция 0. Второй равен 402, и его позиция 1 и так далее.

Мы хотим сделать так, чтобы поддерживались следующие элементарные операции над множествами:

Добавить комментарий
Пишем 2D-игру в стиле Arkanoid на C#

Пишем 2D-игру в стиле Arkanoid на C#

User Rating: 0 / 5

Изображение к статье создано при помощи нейросети Kandinsky

Всем привет.

В сегодняшней статье мы напишем с вами игру в стиле Arkanoid, используя для этого язык C#.

Прежде, чем мы начнём погружение в разработку самой игры, подсвечу некоторые примерные входные навыки и знания, которые будут нужны от читателя для лучшего понимания изложенного ниже материала. Итак, читатель:

  • должен уже иметь некоторый опыт разработки программ на C# и понимать основные принципы объектно-ориентированного программирования (наследование, инкапсуляция, полиморфизм), а также быть знакомым с понятием классов и интерфейсов в C#, включая понятие универсальных методов, классов и интерфейсов в C#
  • должен понимать различия в модификаторах доступа public, protected, private, которые используются в языке C# и применяются к методам, полям и свойствам классов
  • должен иметь опыт создания проектов в среде Microsoft Visual Studio с типом проекта "Приложение Windows Forms (.NET Framework)", а также понимать, где и как настраиваются свойства формы и её элементов управления, а также что такое события и как создавать обработчики событий
  • должен быть знаком с понятием действий (Action) и классом Func, доступном в C#, а также понимать принцип работы лямбда-выражений
  • должен понимать, как работают события (event) и что такое делегаты (delegate) в языке C#
  • должен быть знаком с UML-нотацией и понимать диаграмму классов на UML
  • должен в общих чертах понимать, что такое GDI+ и основные принципы обработки события Paint, работу с классами Pen, Brush, Font, Graphics 

Если по одному из вышеперечисленных пунктов вы видите, что пока не полностью владеете одной из этих тем, это не означает, что вы не поймете эту статью (я буду стараться излагать материал максимально понятно), но всё же могут возникнуть определённые сложности в понимании некоторых аспектов разработки рассматриваемой в статье игры. Поэтому если какие-то части статьи будут не полностью понятны, я рекомендую просто отдельно углубиться в одну из данных тем и изучить её более глубоко, если это необходимо, а затем вернуться к анализу тех сложных участков кода, которые встретятся в статье.

В конце данной статьи-урока вы найдёте ссылку на архив с готовым решением и разработанной игрой.

Итак, давайте приступим к созданию игры.

Добавить комментарий
Поддержка нескольких языков в приложении Windows Forms

Поддержка нескольких языков в приложении Windows Forms

User Rating: 0 / 5

Photo by Brett Zeck on Unsplash | Использованное фото к статье от Brett Zeck на Unsplash

Всем привет.

В сегодняшней статье я расскажу про один из возможных вариантов поддержки нескольких языков в приложении Windows Forms, а в качестве языка программирования для демонстрационного приложения, которое мы разработаем в рамках статьи, будет использован язык C#. Также отмечу, что примерно аналогичную методику я использовал при разработке приложения AINSideBar, где была поддержана локализация на русский, английский, немецкий и китайский языки.

Итак, что мы разберём в рамках этой статьи:

  • разработаем простое приложение для Windows Forms, которое будет приветствовать пользователя по имени, введённому в текстовом поле на главной форме. Приложение будет поддерживать локализацию на следующие языки, в качестве примера: русский, белорусский, немецкий, английский, китайский, испанский и португальский. Аналогичным образом при необходимости вы сможете поддержать в своих программах любое требуемое вам количество других языков;
  • разработанное приложение будет использовать в качестве ссылки отдельную библиотеку классов, содержащую ресурсы, представляющие собой строки, переведённые на указанные языки. Эти строки - различные сообщения, которые программа будет использовать в своей работе, причём они не относятся к элементам главной формы приложения. Сами же элементы на главной форме приложения мы переведём на разные языки, используя другой способ;
  • приложение будет хранить настройку "последний использованный в программе язык" и считывать её при загрузке, сразу переводя интерфейс программы на этот язык;
  • программа сможет переключаться между поддерживаемыми в ней языками без необходимости перезапуска приложения;
  • посмотрим, как можно использовать свойство Tag для элемента ToolStripMenuItem, чтобы хранить метаинформацию о языке, связанном с этим пунктом меню.
Добавить комментарий
Яндекс.Метрика