/// <summary> /// Метод для отрисовки фрактала. /// </summary> /// <param name="depth"> Глубина рекурсии.</param> /// <param name="target"> Место где рисовать.</param> public override void Refresh(int depth, Graphics target) { target.DrawLine(new Pen(Color.Blue), start, end); if (depth <= maxRecur && depth > 0) { // Считаем новые координаты отрезка с учётом поворота прямой. var newLen = Math.Sqrt((end.X - start.X) * (end.X - start.X) + (end.Y - start.Y) * (end.Y - start.Y)) / ratio; var leftLine = new FractTree(end, new Point(end.X - Convert.ToInt32(newLen * Math.Sin(this.leftAngle * Math.PI / 180)), end.Y - Convert.ToInt32(newLen * Math.Cos(leftAngle * Math.PI / 180))), (leftAngle + leftConst).ToString(), (rightAngle - leftConst).ToString(), ratio.ToString()); var rightLine = new FractTree(end, new Point(end.X + Convert.ToInt32(newLen * Math.Sin(this.rightAngle * Math.PI / 180)), end.Y - Convert.ToInt32(newLen * Math.Cos(rightAngle * Math.PI / 180))), (leftAngle - rightConst).ToString(), (rightAngle + rightConst).ToString(), ratio.ToString()); leftLine.Refresh(depth - 1, target); rightLine.Refresh(depth - 1, target); } }
/// <summary> /// Рисование фрактального дерева. /// </summary> /// <param name="target"> Где рисовать.</param> private void Tree(Graphics target) { SetupForTree(); if (textBox2.Text != "" && textBox1.Text != "" && textBox3.Text != "") { Point start = new Point(pictureBox.Size.Width / 2, pictureBox.Size.Height - 40); Point end = new Point(pictureBox.Size.Width / 2, (pictureBox.Size.Height - 40) - 2 * pictureBox.Size.Height / 8); 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); start.X += current.X; start.Y += current.Y; end = new Point((end.X - middle.X) * delta + middle.X, (end.Y - middle.Y) * delta + middle.Y); end.X += current.X; end.Y += current.Y; FractTree fractTree = new FractTree(start, end, textBox2.Text, textBox1.Text, textBox3.Text); fractTree.Refresh(recur, target); } }