Построить треугольник серпинского - C#

Узнай цену своей работы

Формулировка задачи:

Ну в общем нужно построить треугольник серпинского 3-го порядка , используя рекурсивный метод в С# . Проблема в том , что даже не знаю с чего нужно начать . До этого смотрел похожую тему , но в ней описано как построить треугольник с помощью точек , а мне нужно с помощью линий .

Решение задачи: «Построить треугольник серпинского»

textual
Листинг программы
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        Point NextPoint(Point p1, Point p2)
        {
            return new Point
            {
                X = p2.X + (int)Math.Round((p1.X - p2.X) / 2F, 0),
                Y = p2.Y + (int)Math.Round((p1.Y - p2.Y) / 2F, 0)
            };
        }
 
        void DrawYourFigure(int degree, Point[] point, Action<Point[]> renderMethod)
        {
            if (degree <= 0 || renderMethod == null || point == null) throw new ArgumentNullException("input params", "");
            if (point.Length % 3 != 0) throw new ArgumentException();
            if ((int)point.Length / Math.Pow(3, degree - 1) <= 3)
            {
                System.Collections.Generic.List<Point> result = new System.Collections.Generic.List<Point>();
                for (int i = 0; i < point.Length; )
                {
                    var middle = new[] {
                        NextPoint(point[i], point[i + 1]),
                        NextPoint(point[i + 1], point[i + 2]),
                        NextPoint(point[i], point[i + 2])
                    };
                    //1                    
                    var renderResult = new[] { point[i], middle[0], middle[2] };
                    result.AddRange(renderResult);
                    renderMethod(renderResult);
                    //2
                    renderResult = new[] { middle[0], point[i + 1], middle[1] };
                    result.AddRange(renderResult);
                    renderMethod(renderResult);
                    //3
                    renderResult = new[] { middle[2], middle[1], point[i + 2] };
                    result.AddRange(renderResult);
                    renderMethod(renderResult);
                    i += 3;
                }
                DrawYourFigure(degree, result.ToArray(), renderMethod);
            }
        }
 
        protected override void OnShown(EventArgs e)
        {
            int degree = 4;//your degree
            DrawYourFigure(degree, new[] { 
                new Point{ X=10, Y=200}, 
                new Point{ X=210, Y=200},
                new Point{ X=105, Y=10}
            }, elem =>
            {
                var result = this.CreateGraphics();
                result.DrawPolygon(new Pen(Color.Red,2), elem);
            });
            base.OnShown(e);
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы