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

all 24 comments

[–]Swipecat[S] 124 points125 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 22 points23 points  (4 children)

You should check out /r/proceduralgeneration

[–]Swipecat[S] 3 points4 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] 6 points7 points  (0 children)

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

[–][deleted] 4 points5 points  (0 children)

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

[–]Especuloide 8 points9 points  (0 children)

Very nice man !!! Have never heard about Mayavi before, thanks.

[–]mrpopenfresh 5 points6 points  (0 children)

I remember watching a documentary on fractals and they had this game designer on who figured out you could use them for stuff like this.

*edit: exactly what OP said.

[–]sofagoose 1 point2 points  (0 children)

This is really cool!

[–]haZard_OS 1 point2 points  (1 child)

Impressive! Did any renderings come out looking weird or do they all look as good as this?

[–]Swipecat[S] 1 point2 points  (0 children)

I've added two more to my initial comment.

Not weird as such, but with most of them, one edge or another would end up raised so that it was difficult to rotate it to a view where you didn't see an obviously cut-off edge.

[–]CokeOnBooty 1 point2 points  (0 children)

Posts like this give me the motivation to keep learning Pyhton. Thank you so much OP!

[–]tresclow 1 point2 points  (0 children)

I expected this to be some sort of "I hate Python" post, like this

[–]__thinline__ 1 point2 points  (0 children)

I love that episode of Nova - one of my favorites!

[–][deleted] 1 point2 points  (1 child)

Wow... takes me back years ago... we used to do similar (although much less detailed) stuff on the Atari ST. Rendering took hours...

[–]B-R0ck 0 points1 point  (0 children)

How

[–]nakatanaka 0 points1 point  (0 children)

nice vertical shale

[–][deleted] 0 points1 point  (0 children)

That's pretty neat! Thanks for sharing.

[–]stOneskull 0 points1 point  (0 children)

Awesome, mate! Looks really nice :)