Звезда
Звезду можно получить из правильного многоугольника если каждую вторую точку рисовать с другим (внутренним) радиусом. Воспользуемся кодом с предыдущего урока и слегка модифицируем его
private void Form1_Paint(object? sender, PaintEventArgs e)
{
var gr = e.Graphics;
gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
gr.Clear(Color.Black);
PointF? prevPoint = null;
double radius1 = 160; // внешний радиус звезды
double radius2 = 60; // внутренний радиус звезды
var centerX = ClientRectangle.Width / 2;
var centerY = ClientRectangle.Height / 2;
int n = 5; // количество лучей у звезды
var step = 360.0f / (n * 2); // шаг градусов
bool even = false; // флаг указывающий какой из радиусов использовать на текущем шагу
for (int i = 0; i <= n * 2; i++) // пробегаемся циклом по всем иднексам вершин звезды
{
float ang = i * step; // получаем из индекса угол путем домнажения на шаг step
var radians = ang * Math.PI / 180.0 - Math.PI / 2; // переводим в радианы и поворачиваем на -90°
even = !even; // переключаем радиус
var radius = even ? radius1 : radius2; // выбираем радиус исходя из текущего состояния флага even
// расчитываем координаты точки (x, y)
var x = centerX + radius * Math.Cos(radians);
var y = centerY + radius * Math.Sin(radians);
PointF point = new PointF((float)x, (float)y);
if (prevPoint != null)
gr.DrawLine(Pens.White, prevPoint.Value, point); // рисуем линию между точками
prevPoint = point;
}
}
Запустив получим следующий результат:
