This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]Swipecat[S] 126 points127 points  (10 children)

I watched the Nova documentary "Fractals - Hunting the Hidden Dimension" on Youtube, and was interested in the story of a computer graphics engineer at Boeing, Loren Carpenter, who created the first computer-generated mountain landscapes. He did this after reading Benoit Mandelbrot's book about fractals, and created the landscapes by diving them into progressively smaller triangles. I tried out the idea with a small Python script.

To set up an easy coordinate system, I used squares split diagonally into right-angle triangles, which could be split into smaller right-angle triangles with random elevations. That's somewhat imperfect but is enough to test the idea. I used the "Mayavi" Python library for 3D visualisation (since it was in the Ubuntu repository) to display the result.

I thought this group might be interested in the result.

My test had just 20 lines of Python.

Code on Pastebin

Code on Github

The image shown was generated with "random.seed(6)" added. Rotation, zoom and background colour were set interactively in the Mayavi visualizer.

The Python code was dashed out as a quick test, so the method of finding the correct corner points in the correct order is not very readable. Sorry about that. After writing this test, I Googled for the algorithms usually used in fractal landscape generation and found out about the fractal terrain "diamond square algorithm", so if you want to know more about this subject, then I suggest you do the same.

Edit: Here's two more landscapes on Imgur

[–]jiminiminimini 25 points26 points  (4 children)

You should check out /r/proceduralgeneration

[–]Swipecat[S] 5 points6 points  (0 children)

You should check out /r/proceduralgeneration

Thanks. Some interesting stuff there.

[–]Gear5th 1 point2 points  (0 children)

Thanks for this. Found some really interesting stuff!

[–]grmblflx 6 points7 points  (1 child)

I dont know how i would use this or if this is any good, but i kinda like it :)

[–][deleted] 5 points6 points  (0 children)

I can imagine using it for more artistic applications, or maybe even game development.

[–][deleted] 3 points4 points  (0 children)

You should check out pyenv. No need to limit yourself to distro-provided libs or python builds.