Нарисуйте звезды внутри полигонов в C#

В этом примере показано, как рисовать звезды внутри многоугольника, подключая каждую M-ю вершину по мере ее рисования. Если многоугольник имеет N сторон, а N и M взаимно просты (не имеют общих факторов, кроме 1), то линии посещают каждую вершину, а результат - звезду. Обратите внимание, если M равно 1, то линии рисуют многоугольник.

PictureBox Paint цикл обработчика событий для i = 1 до N - 1, звезда в центре PictureBox. Он также рисует каждую звезду возле i-й вершины.

Обработчик событий Paint начинается с создания массивов, удерживающих точки, для рисования центральных и внешних звезд. Эти точки будут рисовать многоугольник, центрированный в начале координат, если они были нарисованы так, как они находятся в массивах.

Далее код запускает цикл for для рисования меньших полигонов. Если вы проверите CheckBox «Только половина», программа будет проходить от 1 до N / 2. Если вы не установите этот флажок, программа пропустит все значения между 1 и N - 1. (Вам нужно всего лишь нарисовать половину из них, чтобы сделать все возможные шаблоны, но их рисование создает хороший симметричный результат .)

Если вы проверите флажок «Относительно простой только» CheckBox, программа вызывает функцию GCD, чтобы решить, является ли значение пропуска и число сторон относительно простым, и оно только рисует линию, если они есть.

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

См. пример Вычислите наибольший общий делитель (GCD) и наименьшее общее число (LCM) двух целых чисел в C# для получения дополнительной информации о функции GCD.

Метод DrawStar, показанный в следующем коде показывает, рисует многоугольник и линии, соединяющие вершины.

Источник: http://csharphelper.com/blog/2015/05/draw-stars-inside-polygons-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

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