アクセスカウンター

Fractal: Koch's Curve (WPF with C#)


Applied rule of recursive drawing




This closed curve is obtained by series connection of three Koch's curves with 3-folded rotation.
This figure indicates an applied rule of recursive drawing. When the complexity order is increased, additional green points and new red-lined paths are generatedred in the same manner. Here, a set of a fractional ratio of 1/3 in length and turning angles of {60o in left, 120o in right and 60o in left} is always inherited for all the order.



//   KochCurve_Turtle_WPF_001\MainWindow.xaml.cs
//   Combination of Three Koch's Curves
//    (WPF application with C#
//     on Microsoft Visual Studio Express 2013 for Windows Desktop)
//   Oct. 28, 2014, by Masao Sakuraba
//   (Ref. 1-5 guided me to this program.)
//   * NOTE1: Blue-color parts were automatically generated by Visual Studio.
//   * NOTE2: Red-color parts were newly added.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Diagnostics;       // Namespace for class "Stopwatch".
using ThinkLib;                 // After adding the file "ThinkLib.dll" as a reference [2].

namespace KochCurve_Turtle_WPF_001
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        Turtle pen1;    // Make a turtle using ThinkLib [3].

        void PatternGenerator(Turtle _pen, double _length, int _complexity)
        {
            if (_complexity == 0)
            {
                _pen.Forward(_length);
            }
            else
            {
                PatternGenerator(_pen, _length / 3, _complexity - 1);  // Recursion [4].
                _pen.Left(60);
                PatternGenerator(_pen, _length / 3, _complexity - 1);
                _pen.Right(120);
                PatternGenerator(_pen, _length / 3, _complexity - 1);
                _pen.Left(60);
                PatternGenerator(_pen, _length / 3, _complexity - 1);
            }
        }
       
        public MainWindow()
        {
            InitializeComponent();
            pen1 = new Turtle(playground);  // After making Canvas in MainWindow
                                            // with the Canvas name of "playground" [3].
            pen1.Visible = false;      // When you do not like showning a turtle [5].
        }

        private void Button1_Click(object sender, RoutedEventArgs e)
        {
                                      // After making Button for Event Handler.
            double Length = 300.0;
            int Complexity = 4;

            pen1.Clear();
            pen1.LineBrush = Brushes.Blue;
            pen1.BrushWidth = 0.7;
            pen1.WarpTo(Length / 6, Length / 3);

            Stopwatch TimeMeasure = new Stopwatch();    // Make a stopwatch.
            TimeMeasure.Start();

            for (int i = 0; i < 3; i++)
            {
                PatternGenerator(pen1, Length, Complexity);
                pen1.Right(120);
            }

            double Time_in_s = (TimeMeasure.Elapsed).TotalSeconds;
            Label1.Content = ("Drawing Time : " + Time_in_s + " s.");
        }
    }
}



Reference
(1) "Think Sharply with C#" by Prof. Peter Wentworth (Rhodes Univ.),
    http://www.ict.ru.ac.za/resources/ThinkSharply/thinksharply/
(2) "Appendices : Getting Started with ThinkLib",
    http://www.ict.ru.ac.za/Resources/ThinkSharply/ThinkSharply/thinklib_getting_started.html
(3) "Chapter 7 : Hello, little turtles!",
    http://www.ict.ru.ac.za/Resources/ThinkSharply/ThinkSharply/hello_little_turtles.html
(4) "Chapter 21 : Recursion",
    http://www.ict.ru.ac.za/Resources/ThinkSharply/ThinkSharply/recursion.html
(5) "Appendices : ThinkLib.Turtle Documentation",
    http://www.ict.ru.ac.za/Resources/ThinkSharply/ThinkSharply/thinklib_turtle_docs.html



< Return to Computer-Related Skills >
< Return to Home >

This home page is produced by KompoZer (free and open software).