/// <summary> /// Функция для отрисовки прямой. /// </summary> /// <param name="depth"> Глубина рекурсии.</param> /// <param name="target"> Где рисовать.</param> public override void Refresh(int depth, Graphics target) { target.DrawLine(new Pen(Color.Blue, 4), start, end); if (depth <= maxRecur && depth > 0) { var left = new Kantor(new Point(start.X, start.Y + delta), new Point((2 * start.X + end.X) / 3, end.Y + delta)); var right = new Kantor(new Point((start.X + 2 * end.X) / 3, end.Y + delta), new Point(end.X, end.Y + delta)); left.Refresh(depth - 1, target); right.Refresh(depth - 1, target); } }
/// <summary> /// Рисование множества Кантора. /// </summary> /// <param name="target"> Где рисовать.</param> private void Kant(Graphics target) { SetupForKantor(); if (int.TryParse(textBox1.Text, out int temp) && temp > 0 && temp <= 100) { Kantor.delta = temp; Point start = new Point(100, 100); start.X += current.X; start.Y += current.Y; Point end = new Point(pictureBox.Size.Width - 100, 100); end.X += current.X; end.Y += current.Y; Point middle = new Point((start.X + end.X) / 2, (start.Y + end.Y) / 2); start = new Point((start.X - middle.X) * delta + middle.X, (start.Y - middle.Y) * delta + middle.Y); end = new Point((end.X - middle.X) * delta + middle.X, (end.Y - middle.Y) * delta + middle.Y); var kantorFract = new Kantor(start, end); kantorFract.Refresh(recur, target); } else if (textBox1.Text != "") { throw new ArgumentException("Неправильно введено количество пикселей между прямыми"); } }