using System.Collections.Generic;
public static void Main()
Random rand = new Random();
Tree poplar = new Tree(rand);
public Vector3 PositionVector = Vector3.Zero;
public Vector3 BranchVector;
public float BaseThickness;
public float EndThickness;
public List<Branch> childList = new List<Branch>();
public Branch(Vector3 position, Vector3 branchVector, string name)
PositionVector = position;
BranchVector = branchVector;
return (BaseThickness*BaseThickness)*(BranchVector.Length())*(0.3f);
Console.Write(BranchVector.X + PositionVector.X);
Console.Write(BranchVector.Y + PositionVector.Y);
Console.Write(BranchVector.Z + PositionVector.Z);
Console.Write(" BaseThick[" + BaseThickness + "]");
Console.Write(" EndThick[" + EndThickness + "]");
Console.Write(" Volume[" + GetVolume() + "]");
foreach(Branch child in childList)
EndThickness = BaseThickness;
foreach(Branch child in childList)
public Branch CreateChildBranch(Tree tree, string name)
Vector3 childPosition = Vector3.Lerp(PositionVector, BranchVector, 0.5f);
Vector3 direction = new Vector3(0,1,0);
float length = (float)(Vector3.Distance(PositionVector, BranchVector)*tree.Rand.NextDouble());
Branch childBranch = new Branch(childPosition, direction*length, name);
childBranch.BaseThickness = BaseThickness * 0.5f;
childBranch.Generation = Generation+1;
childList.Add(childBranch);
if(childBranch.Generation < tree.MaxBranchGenerations){
for (int i = 0; i < tree.MinChildrenPerBranch; i++)
childBranch.CreateChildBranch(tree, childBranch.Name + "->" + i).InfoDump();
public Branch RootBranch;
public int MinChildrenPerBranch = 5;
public int MaxChildrenPerBranch = 5;
public int MinBranchGenerations = 2;
public int MaxBranchGenerations = 2;
public float MinBranchLengthModifier = 0.8f;
public float MaxBranchLengthModifier = 1.1f;
Branch trunk = new Branch(Vector3.Zero, new Vector3(0, 5, 0), "root");
trunk.BaseThickness = 2f;
for (int i = 0; i < MinChildrenPerBranch; i++)
RootBranch.CreateChildBranch(this, RootBranch.Name + "->" + i).InfoDump();