アクセスカウンター

Fractal: Sierpinski Arrowhead Curve (WPF with C#)


Applied rule of recursive drawing





This figure indicates an applied rule of recursive drawing. When the complexity order is increased, additional green points and new red-lined paths are generated in the same manner. Here, two sets of a fractional ratio of 1/2 in length and turning angles of {60o in left, right, right and left} or {60o in right, left, left and right} are alternately inherited for all the order.



//   SierpinskiArrowheadCurve1_WPF\MainWindow.xaml.cs
//   Sierpinski Arrowhead Curve with a Line
//    (WPF application with C#
//     on Microsoft Visual Studio Express 2013 for Windows Desktop)
//   Nov. 7, 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 SierpinskiArrowheadCurve1_WPF
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        Turtle pen1;    // Make a turtle using ThinkLib [3].
        double PI = 3.141592654;
        double DotSize = 1.0;
        double Length = 400.0;
        int Complexity = 8;

        void PatternGenerator1(Turtle _pen, double _length, int _complexity)
        {
            if (_complexity == 0 | _length < 2.4)
            {
                _pen.Forward(_length);
            }
            else
            {
                _pen.Left(60);
                PatternGenerator2(_pen, _length / 2, _complexity - 1);
                _pen.Right(60);                                       // Cross recursion [4].
                PatternGenerator1(_pen, _length / 2, _complexity - 1);
                _pen.Right(60);
                PatternGenerator2(_pen, _length / 2, _complexity - 1);
                _pen.Left(60);
            }
        }

        void PatternGenerator2(Turtle _pen, double _length, int _complexity)
        {
            if (_complexity == 0 | _length < 2.4)
            {
                _pen.Forward(_length);
            }
            else
            {
                _pen.Right(60);
                PatternGenerator1(_pen, _length / 2, _complexity - 1);
                _pen.Left(60);
                PatternGenerator2(_pen, _length / 2, _complexity - 1);
                _pen.Left(60);
                PatternGenerator1(_pen, _length / 2, _complexity - 1);
                _pen.Right(60);
            }
        }

        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].
            pen1.Clear();
            pen1.BrushWidth = DotSize;
            pen1.WarpTo(Length * 0.1, Length * 1.0);
            pen1.LineBrush = Brushes.Orange;
            pen1.Forward(DotSize);
            pen1.LineBrush = Brushes.White;
        }

        private void Button1_Click(object sender, RoutedEventArgs e)
        {                                      // After making Button for Event Handler.
            Stopwatch TimeMeasure = new Stopwatch();    // Make a stopwatch.
            TimeMeasure.Start();

            PatternGenerator1(pen1, Length, Complexity);

            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).