Ejemplo n.º 1
0
 /// <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);
     }
 }
Ejemplo n.º 2
0
        /// <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);
            }
        }