// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 ======= 8 ======= 9 ======= 10
/*

https://github.com/t-o-k/POV-Ray-L-system

Copyright (c) 2023 Tor Olav Kristensen, http://subcube.com

Use of this source code is governed by the GNU Lesser General Public License version 3,
which can be found in the LICENSE file.

*/
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 ======= 8 ======= 9 ======= 10

#version 3.7;

#include "L-system_2D.inc"
#include "colors.inc"
#include "textures.inc"
#include "metals.inc"
#include "golds.inc"

global_settings { assumed_gamma 2.2 }

// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 ======= 8 ======= 9 ======= 10

// Sierpinski Arrowhead-like curve from lsfp.pdf, p. 26, fig. 2.9;
// Droj (29 Mar 2025)
// 

// Variables
#declare Rules[asc("F")] = "F";
#declare Rules[asc("X")] = "XF+F+XF-F-F-XF-F+F+F-F+F+F-X";

InsertNoChangeFunctions(Functions, "X")

// Axiom
#declare Axiom = "XF+F+XF+F+XF+F";

#declare Iterations = 3;
#declare StackSize = 2*Iterations;
#declare L_string = L_Transform(Axiom, Rules, Iterations);

#declare pStart = < -21.5, 18,  0>;
#declare InitialLength = 1.0;
#declare InitialRadius = 0.25;
#declare InitialHeading = radians(0.0);
#declare InitialTurnAngle = radians(60.0);

// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 ======= 8 ======= 9 ======= 10

union {
    L_Draw(
        Functions,
        L_string,
        StackSize,
        pStart,
        InitialLength,
        InitialRadius,
        InitialHeading,
        InitialTurnAngle,
        true,
        true,
        false,
        ""  // Sierpinski_Arrowhead8.inc
    )
    texture { T_Silver_5C }
    
    scale 1.0
    rotate 180*x
}

// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 ======= 8 ======= 9 ======= 10

background { color <0.0,0.0,0.0> }


camera {
    perspective
    location <0, 0, -80>
    sky       <0.0, 1.0, 0.0>  
    up        <0.0, 1.0, 0.0>
    right     x*image_width/image_height 
    angle        54.0
    look_at   <0, 0,  0>
}

light_source {
  <0, 0, 0>
  color rgb <1, 1, 1>
  translate <-15, 50, -100>
}

// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 ======= 8 ======= 9 ======= 10
