Построить треугольник серпинского - 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) { } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д