Рисуем правильные полигоны на C#

Правильные полигоны

Рисование полигонов в C# относительно легко благодаря GDI+. Что касается рисования правильных многоугольников (полигонов с ребрами одинакового размера), то это становится немного сложнее, потому что нам нужно вычислить вершины многоугольников.

Математике

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

Таким образом, мы можем вычислить внутренний угол каждого ребра, погрузив общее количество градусов в окружности (360) на количество сторон. Таким образом, для нашего примера выше, пятиугольник (5-сторонний многоугольник) будет иметь внутренние углы 360/5 = 72 градуса.

Как рассчитать вершины под внутренним углом?

В качестве аргументов функция принимает начало координат (центр многоугольника), радиус и градус. Функция просто использует тригонометрию, чтобы выяснить, как долго гипотенуза прямоугольного треугольника будет начинаться в начале под заданным углом. Вы можете посмотреть код по ссылке выше или в примере проекта внизу страницы.

Теперь очень легко вычислить вершины многоугольника. С помощью простой петли мы можем использовать градус для координатной функции на каждом угловом интервале.

Рисование

Нарисовать многоугольник на изображении так же просто, как использовать функцию DrawPolygon в классе System.Drawing.Graphics

 

Так же вам потребуется разместить на форме pictureBox и четыре контрола numericUpDown, ну конечно button

Заключительные замечания

Мало что стоит отметить. Прежде всего, функция возвращает объекты Point, в зависимости от того, насколько точным должен быть полигональный рисунок, вместо этого вы можете использовать PointF.

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

Обновлено: 08.01.2022 — 16:48

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.