top | item 10372245

Show HN: A WebGL-based Complex Expression Parser and Plotter

23 points| brandonpelfrey | 10 years ago |github.com

8 comments

order

BenoitP|10 years ago

Very nice!

I have spend the last hour trying to display the Poincaré disk[1], but to no avail.

I have z * ( cos(1.57 * (a^2+b^2+1)^(1/2)) / sin(1.57 * (a^2+b^2+1)^(1/2)) ), which project the coordinates to the infinite on a circle. But this is only a fancy zoom, straight lines are not projected to circles.

[1]https://en.wikipedia.org/wiki/Poincar%C3%A9_disk_model

marcosscriven|10 years ago

From the docs:

"It's important to note that When rendering with these infinitely-tiled images, the mapping that is rendered is actually the inverse of the function given. This is because it is prohibitively expensive to compute images of the function itself. (In fact, we are rendering a kind of "pull-back".) Specifically, when rendering a pixel in the image, the location of that pixel in the complex plane is passed to your function, which produces a complex value. That transformed value specifies a location in the original image. This procedure is fast, but plots the inverse of the function given. So, if you want to plot e.g. log(z), then you should instead put in e^z."

BenoitP|10 years ago

I also have this:

((i-(z)/10000)/(i+(z)/10000))^(50000)

which is sort of like the Poincaré half plane

arcatek|10 years ago

Note that you can apparently use the `t` variable to express time.

Ex: t*z

brandonpelfrey|10 years ago

I should probably try to find a way to make it clearer what all can be done, or make it more obvious where the documentation is ("t" is mentioned there.)

VikingCoder|10 years ago

z ^ z

I love thinking about this, as it goes negative.