I am looking for a Python programmer to automate the creation of a 3D model of a tree. The function will be to define a (initially only one) starting point (trunk) with a vector for an initial direction and a boundary in three planes (see yellow and orange shapes in 3D tree with shapes) for the tree to grow. It will include branching of the tree and a growth algorithm based on 'sunlight' defined by the shapes in each plane.
The line will 'grow' from the starting point at a maximum angle (variable) from its direction (see 3D tree direction), the step 'grow' length should be a variable. The chosen angle should be chosen based on:
1. the maximum distance to the next boundary as defined by the boundaries 1 and 2 (as per 3d tree with shapes) so the tree never goes outside these boundaries. The direction that stays within shape 3 should be prioritised (a weighting that is a variable) but the tree can go outside this boundary.
2. The distance to other parts of the 'tree' so the branch grows into free space like a normal tree.
These should be weighted and come up with a chosen vector and 'sunlight' parameter.
Branching should occur randomly (variable determines the average number of branches per length). Each branch should grow as described above. The growth of a branch will be determined by the one with the most 'sunlight'. When a branch grows the sunlight parameter will be recalculated. Then at the next grow step the branch with maximum 'sunlight' will be chosen to grow.
Thickness of tree
The thickness of the tree in the model should be between the minimum and maximum sizes (variables to be defined). The tree should start at the maximum thickness and reduce down each branch.
1. Demonstrate software that outputs a 3D model of tree in STL (or accepted equivalent) sufficient for 3D printing. Provide multiple outputs with different shapes on each face to test success.
When viewing the 3D model from the direction of each of the faces the defined shapes (no 1 and 2 in 3D tree with shapes) must be distinguishable (therefore >50% of the shape must be 'filled').