Построение вложенных спиральных квадратов. Аналогично примеру на Pascal, на форме находится кнопка, по нажатию на которую, сначала рассчитываются координаты, начиная с правой нижней точки, двигаясь по часовой стрелке, заканчивая верхней правой точкой. Координаты первой точки рассчитываются по формуле:
x = (int)(x0 + c * Math.Cos(b + 1 * Math.PI / 4));
y = (int)(y0 + c * Math.Sin(b + 1 * Math.PI / 4))
Координаты трёх следующих точек рассчитываются по этой же формуле, только при расчете каждой следующей координаты мы прибавляем и умножаем 2 ко второму слагаемому в скобке. Т.е. вторая точка будет иметь координаты:
x = (int)(x0 + c * Math.Cos(b + 3 * Math.PI / 4));
y = (int)(y0 + c * Math.Sin(b + 3 * Math.PI / 4));
И так далее, вплоть до 4 точки.
Переменная "c" рассчитывается по формуле:c=x*Math.Sin(Math.PI/3), для каждого следующего квадрата эта переменная получается путем умножения ее предыдущего значения на Math.Sin(Math.PI/3). Переменная х была найдена экспериментальным путем.
Переменная "b" рассчитывается по формуле: b =b + Math.PI/19, для каждого следующего квадрата эта переменная получается путем сложения ее предыдущего значения с Math.PI/19.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { int i; //Переменная используемая в цикле, обозначает кол-во проходов double l, a; //Переменные используемые для построения каждого квадрата const int d0 = 283, //Константа, влияющая на расстояние от //центра квадрата до углов(Не диагональ), //подобрана экспериментальным путем*/ x0 = 200, //Координаты центра квадрата y0 = 200; public Form1() { InitializeComponent();//Обязательный метод для поддержки конструктора } void DrawSquare(double c, double b) //функция построения и отрисовки квадрата { int x1, x2, x3, x4, y1, y2, y3, y4; //Координаты углов каждого квадрата Pen myPen = new Pen(Color.Black, 1); //Выбираем перо "myPen" черного цвета Black //толщиной в 1 пиксель Graphics g = pictureBox1.CreateGraphics();//Объявляем объект "g" класса Graphics и //предоставляем ему возможность рисования на pictureBox1: x1 = (int)(x0 + c * Math.Cos(b + 1 * Math.PI / 4));//Координаты правой нижней y1 = (int)(y0 + c * Math.Sin(b + 1 * Math.PI / 4));//точки x2 = (int)(x0 + c * Math.Cos(b + 3 * Math.PI / 4)); //Координаты левой нижней y2 = (int)(y0 + c * Math.Sin(b + 3 * Math.PI / 4)); //точки x3 = (int)(x0 + c * Math.Cos(b + 5 * Math.PI / 4)); //Координаты левой верхней y3 = (int)(y0 + c * Math.Sin(b + 5 * Math.PI / 4)); //точки x4 = (int)(x0 + c * Math.Cos(b + 7 * Math.PI / 4));//Координаты правой верхней y4 = (int)(y0 + c * Math.Sin(b + 7 * Math.PI / 4)); //точки //Метод строящий фигуру по 4 точкам g.DrawPolygon(myPen, new Point[] { new Point(x1,y1),new Point(x2,y2), new Point(x3,y3),new Point(x4,y4), }); } //Функция построения квадратов с заданными параметрами по нажатию кнопки private void button1_MouseClick(object sender, MouseEventArgs e) { l = d0; a = 0; for (i = 1; i <= 30; i++)//Цикл, рисующий 30 квадратов { DrawSquare(l, a); //Вызов функции построения и отрисовки квадрата a =a + Math.PI/19;//изменяет угол поворота следующих квадратов l=l*Math.Sin(Math.PI/3);//изменяет размер следующих квадратов } } } }
Прикрепленный файл | Размер |
---|---|
Spir_Kvadrat_C#.zip | 47.35 кб |