Grasshopper

algorithmic modeling for Rhino

# Koch Tetrahedron with hoopsnake

Hi guys,

I have created a definition that produces a fractal of regular tetrahedron based on the Koch division. However I am trying to take the next stape and make it recursive with hoopsnake.

My definition essentially takes a regular tetrahedron, then creates a new tetrahedron base (triangle) by connecting the midpoints of the sides of each surface. Then it displaces the midpoint of this new base by the needed height for a regular tetrahedron alongside the normal vector of this surface.

The problem at the moment is that for one of the 3 intial surfaces I get a vector (0.0,0.0,0.0), which essentially is not a vector. This however does not happen when I do the whole process manually.

The result I am aiming for is essentially this.

I attach the definition icluding both the recursive definition as well as the manual one. If anyone has any input, it would be great.

Cheers,

T

Views: 5245

Attachments:

### Replies to This Discussion

Hi,

well its a little bit rough and untidy. And there is plenty of potential for further optimization and debugging  but is working so take a look.

Best,

M.

That's great!

May I recommend that you model the triangular surfaces with meshes? It might run faster and be lighter. You are dealing with triangles so the following example should work. Otherwise triangular NURBS surfaces will be a trimmed version of their original four-sided self and after several recursions it might take up unnecessary memory space (as shown below).

I will try that, as it is true that around the 6th recursion the computer starts to drag...

Cheers,

T

That's true!! With mesh faces you can also avoid unecessary components such as 3pt plane and just use mesh normal! Either way the definition can be really compact and fast! What i am not sure of is if you can also create the triangular holes on the existing faces!!!
Best,
M.

Well, I replicated it and it works fine. I am not so sure if I would describe your method for Brep inclusion as a cheat. I found it was a rather smart use of geometry rules.. I guess the next step would be creating the geometry in a cleaner way so I just get the shell this structure which would allow the geometry to be seen from both sides.

You have been great help, can't thank you enough.

Marios

i was linking the components according to the image but i didnt find this component:

what is it name?

Attachments:
Hi Mariana,
This is the path mapper component.
Best,
M.

This looks great!

Would you mind posting the script for this or commenting with what expressions were used in the blue highlighted evaluate component and the move components later in the script so I can take a look? Trying to replicate to understand how the script is working to then apply to my own student project.

Thanks

Hi guys,

I have been trying to make a different version of this definition that is going to be based on triangle meshes and the new tetrahedrons will be generated from the rotation of those triangles instead of rebuilding them (similar to Koch snowflake method of segmenting the lines and rotating the middle segment). However I face two problems. One is that for some reason i get slightly changed values for my triangles' sides. If i set it to be 60, i get one 60, one 60.00001 and one 60.00002. Is there a way to work around that or is it a problem of the mesh geometry? The other problem is that while i try to use the same Brep inclusion method that Marios suggested , it doesn't seem to work anymore which is weird as it essentially the same principle.

Anyway I attach the new definition if anyone is in the mood of taking a look.

Attachments:

Hi all,

I am trying to do the same thing but using meshes instead. The only problem is that the "path mapper as tree" command does not work and I only get the recursion on one face each time. I attach the definition for anyone on the mood to help me out!

Best,

T

Attachments:

Hi Thanassis,

You are getting a failure on the path mapper because your data structure becomes of the path {0;0} somewhere within the mesh topological operations you perform. this way the path mapper with syntax {A}(i) --> (i/3) fails to collect the specific path which has more branches. you should focus on keeping the data paths the same throughout the iterations, otherwise you will fail to perform he same operation at on pyramid at the time.

Best,

M.

Hi Marios,

thanks very much for the reply. I think what I was missing is to draft the values on the input Data of the hoopsnake. However, although now the recursions continue, I still have them only on one face. What is very strange though is that while I only get the meshes for one side, if I explode the output, I get all the vertices from all the meshes that it is supposed to create! Any idea what may go wrong?

Also, in my effort to get only the vector on each face that points outwards of the existing Brep, i developed your definition (with the bounding boc and sphere). Essentially all you need is test a line created from the vector for interection in each Brep you get from each recursion, so essentially test it against each step's output. Since in my Brep definition one side was open, I just capped the holes and it worked fine. But now with meshes it is a bit trickier. Is there a way to replicate "cap holes" command for meshes?

I attach both the Brep and the mesh definition, in case you want to give it a look.

Best,
T

Attachments:

• View All